Пакет администратора Sonata: диапазон DatePicker

Как мне создать фильтр doctrine_orm_datetime_range в пакете администратора Sonata, который использует средство выбора даты пользовательского интерфейса jQuery?

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

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

person Jeroen    schedule 21.01.2013    source источник


Ответы (5)


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

Чтобы активировать поля формы выбора даты и времени, вы должны включить загрузку шаблона ветки, который содержит соответствующий код.

КОНФИГУРАЦИЯ

Для Symfony 4:

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

Для Symfony 3:

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

Для Symfony 2:

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

ПРИМЕНЕНИЕ

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

    use Sonata\CoreBundle\Form\Type\DatePickerType;

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

в фильтре даты и времени:

    use Sonata\CoreBundle\Form\Type\DatePickerType;

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

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

    use Sonata\CoreBundle\Form\Type\DateTimeRangePickerType;

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

СТАРЫЙ ОТВЕТ

Чтобы использовать 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" ]);
 });
person pulzarraider    schedule 16.02.2013
comment
Я следовал вашим инструкциям, и все работало, как и ожидалось, пока я не нажал кнопку «Фильтр». Я получаю сообщение об ошибке проверки полей даты. Это значение недействительно. единственное, что я сейчас делаю по-другому, это то, что я использую 'input_type' => 'timestamp', в остальном это то же самое. Виджет date_range по умолчанию отлично работает для меня. Есть идеи, почему? - person Onema; 24.12.2013
comment
Ключом к моей проблеме было установить правильный формат: 'format' => 'M/d/y' - person Onema; 31.12.2013
comment
Кажется, что это решение больше не работает с Symfony 2.6... Но: $datagridMapper->add('expirationDate','doctrine_orm_date_range',['field_type' => 'sonata_type_date_range' , 'field_options'=> array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker'))]); Сработало для меня! - person Steven; 25.02.2015

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

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

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

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

person tommy    schedule 06.06.2016
comment
Как раз то, что я искал, вам нужно только добавить шаблон для выбора даты в файл конфигурации. - person kunicmarko20; 03.04.2017
comment
Для желающих использовать doctrine_orm_datetime_range формат будет 'format' => 'yyyy-MM-dd HH:mm:ss'. - person iloo; 04.09.2018

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

введите здесь описание изображения

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

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

Внимание: для Sonata 3 необходимо использовать:

# config/packages/twig.yml
twig:
    form_themes:
        - '@SonataForm/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,
    ]);
}
person Sebastian Viereck    schedule 20.09.2019

В 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,
    ]);
}
person borschtel1    schedule 18.01.2019
comment
это не работает нормально, когда мы фильтруем некоторые данные по любой дате, фильтр был удален. - person Owais Aslam; 08.07.2019

для Sonata 3 вы должны использовать @SonataForm вместо @SonataCore:

# config/packages/twig.yml
twig:
    form_themes:
        - '@SonataForm/Form/datepicker.html.twig'
person Sebastian Viereck    schedule 13.08.2020