Sonata Admin Bundle: Диапазон DatePicker

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

Пробвах следното, но не става:

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

Знам, че темата е стара, но все пак ми помага малко, така че може би ще помогне на някого в бъдеще.

Намерих начин да настроя формат на датата за избор на дата:

$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'

Внимание: за Соната 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

за Соната 3 трябва да използвате @SonataForm вместо @SonataCore:

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