JQuery UIの日付ピッカーを使用するSonata管理バンドルでdoctrine_orm_datetime_range
フィルターをどのように作成しますか?
私は以下を試しましたが、うまくいきません:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('datumUitgevoerd', 'doctrine_orm_datetime', array('widget' => 'single_text'), null, array('required' => false, 'attr' => array('class' => 'datepicker')))
;
}
カスタム日付ピッカーを使用する必要がなくなりました。ソナタには、ネイティブの日時ピッカーが含まれており、Twitter Boostrapでうまく機能します。
日時ピッカーフォームフィールドをアクティブにするには、関連するコードを含むtwigテンプレートのロードを有効にする必要があります。
Symfony 4の場合:
# config/packages/twig.yaml
twig:
# ...
form_themes:
- '@SonataCore/Form/datepicker.html.twig'
Symfonyの場合:
# 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]);
}
doctrine_orm_datetime
でdatePickerを使用するには、次のコードを使用します。
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime', array(), null, array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')));
}
または、doctrine_orm_datetime_range
でdatePickerを使用するには、コードは次のようになります。
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper->add('datumUitgevoerd', 'doctrine_orm_datetime_range', array(), null, array('widget' => 'single_text', 'required' => false, 'attr' => array('class' => 'datepicker')));
}
また、メインテンプレートをオーバーロードして、DatePickerを初期化するカスタムJavaScriptファイルを追加する必要があります。
#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" ]);
});
それは古いトピックであることは知っていますが、とにかく少しは役に立ちますので、将来誰かに役立つかもしれません。
日付ピッカーの日付形式を設定する方法を見つけました:
$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に設定されています。
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,
]);
}
Symfony 4で日時範囲フィルターが必要な場合
あなたは使うことができます:
# 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,
]);
}