Symfony2 - Sonata Admin - добавить javascript перед полем

В классе администратора:

protected function configureFormFields(FormMapper $formMapper) {
    $formMapper
            ->add('name', 'text')
            ->add('description', 'text')
    ;
}

Я не знаю, как я могу перед "именем" добавить javascript, вы можете мне помочь?


person tengopl    schedule 22.01.2014    source источник
comment
Вам нужно добавить javascript для определенного поля (поле name в данном случае)? Можете ли вы рассказать мне больше о том, что вы хотите сделать?   -  person Dani Sancas    schedule 22.01.2014
comment
Я хочу создать имя автозаполнения из ajax.   -  person tengopl    schedule 23.01.2014
comment
Спасибо, теперь я знаю, что ответить. Подожди минутку, я пишу тебе ответ.   -  person Dani Sancas    schedule 23.01.2014


Ответы (3)


Работает на меня:

В классе администратора src\PP\TestBundle\TestAdmin.php

public function configure() {
    $this->setTemplate('edit', 'PPTestBundle:CRUD:edit_javascript.html.twig');
}

В src\PP\TestBundle\Resources\views\edit_javascript.html.twig

{% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %}
{% block javascripts %}
{{ parent() }}
<script src="{{ asset('bundles/pptest/admin/js/myscripts.js') }}" type="text/javascript"></script>
{% endblock %}

Когда вы сделаете все это и загрузите myscripts.js, вы должны отправить это в командной строке:

app/console assets:install web

(возможно, я что-то забыл)

Извините за мой плохой английский :‹>

person tengopl    schedule 24.01.2014
comment
Если вам нужно установить активы из пакета, используйте вместо этого app/console assets:install web --symlink, чтобы не копировать ресурсы... - person Alex Mantaut; 24.06.2016
comment
setTemplate также можно вызвать с помощью конфигурации службы, как описано здесь. - person Ruslan Osmanov; 04.10.2019

ОТРЕДАКТИРОВАНО

Вам необходимо создать для него собственный шаблон TWIG (куда вы можете поместить код JavaScript непосредственно перед кодом виджета).

Затем вы пишете внутри ap/config/config.yml, где ваш собственный шаблон должен позволить Symfony и SonataAdmin распознать его.

У вас есть некоторая информация здесь Администратор Sonata — Пользовательский шаблон

Подробнее здесь настроить типы полей

Пример может быть примерно таким:

Административный класс

protected function configureFormFields(FormMapper $formMapper) {
    $formMapper
            ->add('name', 'ajax_autocomplete')
            ->add('description', 'text')
    ;
}

И в шаблоне TWIG вам нужно расширить шаблон поля Sonata Admin, который лучше соответствует вашим потребностям. В данном случае может быть base_edit.html.twig или edit_text.html.twig

У вас есть список шаблонов для расширения внутри этой административной папки Sonata: vendor\sonata-project\admin-bundle\Sonata\AdminBundle\Resources\views\CRUD

Настройка

Представьте, что вы поместили свой собственный шаблон внутрь XXXBundle:YYY:ajax_autocomplete.html.twig

Я думаю, что это должно сработать, если вы напишете здесь строку:

sonata_doctrine_orm_admin:
    templates:
        types:
            list:
                ajax_autocomplete: XXXBundle:YYY:ajax_autocomplete.html.twig
person Dani Sancas    schedule 22.01.2014
comment
Да, но теперь показывает ошибку: Шаблон опции не существует. Известные варианты: action, attr, auto_initialize (...) - person tengopl; 23.01.2014
comment
Это означает, что: Мы не можем использовать пользовательский шаблон на странице создания/редактирования. ##EDIT## Может быть, я должен использовать фильтр? - person tengopl; 23.01.2014
comment
Теперь у меня ошибка: Не удалось загрузить тип ajax_autocomplete. Он работает, как я добавляю в configureListFields, но не работает в методе configureFormFields, где это необходимо. - person tengopl; 23.01.2014
comment
Может я ошибся, не надо добавлять в конфиг sonata_doctrine_orm_admin на /app/config/config.yml. Почему? Потому что относится не к Sonata Admin, а к Symfony2. Прочтите, пожалуйста, следующую документацию: symfony.com/doc/current/cookbook/form / - person Dani Sancas; 23.01.2014
comment
Вы пробовали решение из документации (комментарий выше)? Я заинтересован в этом. - person Dani Sancas; 23.01.2014
comment
Да, я проверил это, и это не работает, потому что в вашем коде -›› list: ‹-- это только для отображения списка, и мне нужно это в редактировании.. .У меня уже есть, позже пришлю рабочий код. - person tengopl; 24.01.2014

Начиная с администратора сонаты 3.x, вы можете добавлять/удалять js/css на/со страницы без ее расширения.

sonata_admin:
    ....
    assets:
        # javascript paths to add to the page in addition to the list above
        extra_javascripts:
            - 'your js file path'
        # javascript paths to remove from the page
        remove_javascripts: 
            - 'your js file path'

вы можете найти дополнительную информацию здесь https://github.com/sonata-project/SonataAdminBundle/pull/4836/files?short_path=e252be0#diff-e252be027e26148c11d971dc969f4be0

person Terlan Abdullayev    schedule 24.07.2019