Подтвердить что ты не робот

Соната Admin Bundle: диапазон DatePicker

Как создать фильтр doctrine_orm_datetime_range в пакете Admin Sonata, который использует jQuery UI datepicker?

Я пробовал следующее, но он не работает:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('datumUitgevoerd', 'doctrine_orm_datetime', array('widget' => 'single_text'), null, array('required' => false,  'attr' => array('class' => 'datepicker')))
    ;
}
4b9b3361

Ответ 1

ОБНОВЛЕНО 2016-02-02

Если вы используете 3. * Symfony, необходимо использовать следующую конфигурацию ветки:

# app/config/config.yml twig: # ... form_themes: - 'SonataCoreBundle:Form:datepicker.html.twig'

ОБНОВЛЕНО 2015-05-04

Использование пользовательского выбора даты больше не требуется. Соната содержит встроенный сборщик данных, который хорошо работает с Twitter Boostrap.

Чтобы активировать поля формы сборщика данных, вы должны добавить SonataCoreBundle:Form:datepicker.html.twig в ресурсы формы твига в app/config.yml:

twig:
    # ...
    form:
        resources:
            - 'SonataCoreBundle:Form:datepicker.html.twig'

Вы можете использовать сборщик в форме:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('createdAt', 'sonata_type_date_picker');
}

в фильтре datetime:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
            ->add('createdAt', 'doctrine_orm_datetime', array('field_type'=>'sonata_type_datetime_picker',));
}

или в качестве фильтра диапазона даты и времени:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
            ->add('createdAt', 'doctrine_orm_datetime_range', array('field_type'=>'sonata_type_datetime_range_picker',));
}

OLD ANSWER

Чтобы использовать datePicker в doctrine_orm_datetime, используйте этот код:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime', array(), null, array('widget' => 'single_text', 'required' => false,  'attr' => array('class' => 'datepicker')));
}

Или использовать datePicker в doctrine_orm_datetime_range код должен выглядеть так:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime_range', array(), null, array('widget' => 'single_text', 'required' => false,  'attr' => array('class' => 'datepicker')));
}

И вы должны перегрузить главный шаблон, чтобы добавить свой пользовательский файл javascript для инициализации DatePicker.

#File app/config.yml
sonata_admin:
    title:      Admin
    title_logo: /logo_admin.png
    templates:
        layout: AcmeDemoBundle::standard_layout.html.twig  
 #...another Sonata and Symfony settings...
{# File src/Acme/Bundle/DemoBundle/Resources/views/standard_layout.html.twig #}
{% extends 'SonataAdminBundle::standard_layout.html.twig' %}

{% block javascripts %}
    {{ parent() }}
    <script src="{{ asset('bundles/acmedemo/js/jquery_admin.js') }}" type="text/javascript"></script>
 {% endblock %}
 //File web\bundles\acmedemo\js\jquery_admin.js
 jQuery(document).ready(function(){
      jQuery.datepicker.setDefaults( jQuery.datepicker.regional[ "" ] );
      jQuery(".datepicker").datepicker( jQuery.datepicker.regional[ "en" ]);
 });

Ответ 2

Я знаю, что это старая тема, но мне это все равно помогает, поэтому, возможно, это поможет кому-то в будущем.

Я нашел способ настроить формат даты для datepicker:

$datagridMapper->add('createdAt', 'doctrine_orm_date_range', [
    'field_type'=>'sonata_type_date_range_picker',
    'field_options' => [
        'field_options' => [
            'format' => 'yyyy-MM-dd'
        ]
    ]
]);

По умолчанию этот параметр parametr установлен в Sonata\CoreBundle\Form\Type\DatePickerType.

Ответ 3

В Symfony 4 мне пришлось сделать следующее для фильтра даты и времени:

# config/packages/twig.yml
twig:
    form_themes:
        - '@SonataCore/Form/datepicker.html.twig'

И в моем классе администратора мне пришлось настроить фильтр следующим образом:

use Sonata\CoreBundle\Form\Type\DateTimePickerType;

...

protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
    $datagridMapper->add('createdAt', 'doctrine_orm_datetime', [
        'field_type'=> DateTimePickerType::class,
    ]);
}

Ответ 4

Если вам нужен фильтр диапазона дат и времени в Symfony 4

enter image description here

Вы можете использовать:

# config/packages/twig.yml
twig:
    form_themes:
        - '@SonataCore/Form/datepicker.html.twig'

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

use Sonata\CoreBundle\Form\Type\DateTimeRangePickerType;

protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
    $datagridMapper->add(
        'createdAt', 
        'doctrine_orm_datetime_range', [
        'field_type'=> DateTimeRangePickerType::class,
    ]);
}