20

Come creare un filtro doctrine_orm_datetime_range nel pacchetto Sonata Admin che utilizza il Datepicker dell'interfaccia utente jQuery?Pacchetto Admin Sonata: Intervallo DatePicker

Ho provato quanto segue, ma non funziona:

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

risposta

56

AGGIORNATO 2016-02-02

Se si utilizza 3. * Symfony la seguente configurazione ramoscello deve essere utilizzato:

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

AGGIORNATO 2015-05-04

Non è più necessario utilizzare il selettore di date personalizzato. Sonata contiene selettore datetime nativo, che funziona bene con Twitter Boostrap.

Per attivare i campi del modulo datetime picker, è necessario aggiungere SonataCoreBundle:Form:datepicker.html.twig nelle risorse di forma ramoscello in app/config.yml:

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

È possibile utilizzare il selettore in forma:

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

nel filtro datetime:

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

o come filtro intervallo datetime:

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

risposta Old

Per utilizzare DatePicker in doctrine_orm_datetime uso di questo codice:

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

O, per usare DatePicker nel doctrine_orm_datetime_range il codice dovrebbe essere simile:

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

E voi dovrebbe sovraccaricare il modello principale per aggiungere il file javascript personalizzato per inizializzare DatePic ker.

#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" ]); 
}); 
+0

Ho seguito le tue istruzioni e tutto funziona come previsto fino a quando non premo il pulsante "Filtro". Ricevo un errore di convalida per i campi della data "Questo valore non è valido." l'unica cosa che sto facendo attualmente è che sto usando "input_type" => "timestamp", a parte che è lo stesso. Il widget date_range predefinito funziona perfettamente per me. Qualche idea, perché? – Onema

+1

La chiave del mio problema era impostare il formato corretto: ''format' => 'M/d/y'' – Onema

+1

Grazie! La soluzione funziona perfettamente. – carzogliore

7

So che è argomento vecchio, ma mi aiuta un po 'in ogni caso, quindi forse sarà aiutare qualcuno in futuro.

Ho trovare un modo per impostare un formato di data per datepicker:

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

Su di default che formato parametr è allestito nella Sonata \ CoreBundle \ Form \ Type \ DatePickerType.

+0

Proprio quello che stavo cercando, è sufficiente aggiungere il modello per la selezione della data al file di configurazione anche. – kunicmarko20