2013-02-03 14 views
5

Con la versione appena rilasciata di Zend Framework 2, two new form elements were added; DateSelect e MonthSelect. Voglio usare il primo, che aggiunge tre selezioni; giorno, mese e anno. Tuttavia, ho un problema nel formattare l'output come voglio - e, non c'è documentazione per questo!Zend Framework 2 DateSelect/MonthSeleziona formattazione

sto aggiungendo l'elemento del modulo alla mia forma come questo (tratto da this page):

$this->add(array(
    'type' => 'Zend\Form\Element\DateSelect', 
    'name' => 'birthDate', 
    'options' => array(
     'label'    => 'Date', 
     'create_empty_option' => true, 
     'day_attributes'  => array(
      'data-placeholder' => 'Day', 
      'style'   => 'width: 20%', 
     ), 
     'month_attributes' => array(
      'data-placeholder' => 'Month', 
      'style'   => 'width: 20%', 
     ), 
     'year_attributes'  => array(
      'data-placeholder' => 'Year', 
      'style'   => 'width: 20%', 
     ) 
    ) 
)); 

per l'output, che sto facendo in questo modo:

echo $this->formDateSelect($form->get('birthDate')); 

Il fatto è che io don Sappiamo come controllare il modo in cui i file selezionati sono formattati. Ad esempio, sono attualmente emessi in questo formato: [month] [day], [year]. Voglio cambiare due cose; prima, voglio cambiare giorno e mese, e in secondo luogo, voglio eliminare la virgola.

Gli helper utilizzano la classe IntlDateFormatter per formattare i selezioni. Nel codice sorgente, ho notato che è possibile utilizzare il predefined constants per il tipo di data quando si chiama __invoke() [link to source code], in questo modo:

echo $this->formDateSelect($form->get('birthDate'), IntlDateFormatter::SHORT); 

aver provato tutte le costanti, non riesco ancora a ottenere il formato che voglio.

Ho notato che ci sono getter per le tre selezioni, ma utilizzando l'helper di vista formSelect con ciascuna di esse, i rendering vuoti vengono visualizzati perché la popolazione di dati si trova all'interno dei nuovi helper di visualizzazione. In modo che praticamente sconfigge lo scopo di utilizzare anche i selettivi singolarmente; allora potrei anche usare solo selezioni regolari.

Qualcuno ha idea di come ottenere un maggiore controllo su come vengono selezionati i miei selezioni? E 'anche possibile senza troppi problemi, o dovrei usare solo tre selezioni regolari per la massima flessibilità?

risposta

2

Il formato di ViewHelper è $this->formDateSelect($element, $intlFormat, $locale).

Con ciò detto, dovresti essere in grado di creare l'output desiderato accedendo alle impostazioni locali correnti e inserire int in ViewHelpers __invoke(). Vedendo la getLocale() del ViewHelper implica, che il default translator dalla configurazione non è utilizzato, in modo da avere per impostare un locale esplicitamente per questo ViewHelper, ma poi dovrebbe funzionare tutto bene;)

Se questo non funziona come previsto per voi, potrei consigliarvi di mandare un messaggio a Bakura su his Blog about the new Form Features

+0

Stavo solo dando per scontato che stia usando le impostazioni locali dalla mia configurazione, quindi l'ho lasciato fuori. Cambiando il locale, non sempre mi dà quello che voglio (ad esempio, per il mio paese mi dà un formato che non mi piace). Tuttavia, sono stato fortunato che per la mia lingua di arrivo, la formattazione è esattamente come la voglio io! Mi è piaciuto così: 'echo $ this-> formDateSelect ($ this-> form-> get ('birthDate'), IntlDateFormatter :: LONG, 'ro_RO');'. Grazie mille per la tua risposta - è molto apprezzata! – Andy0708

2

Non ho idea di tutti i motivi per cui qualcuno vorrebbe inserire una virgola casuale tra Seleziona elementi DOM quando si stampa una data ... cosa si può fare con esattamente?

Per rimuovere la virgola e qualsiasi altro delimitatore è possibile passare in via opzioni:

"render_delimiters": false 

Che credo dovrebbe essere false per impostazione predefinita

0

Come Sam cita si può semplicemente aggiornare le impostazioni locali nella vostra php.ini

Ad esempio, ho questo nel mio php.ini

intl.default_locale = it_IT

Questo formatta l'elemento DateSelect nel formato giorno/mese/anno necessarie per i miei progetti nel Regno Unito.