Personalizzare il DateTime helper in CakePHP 3.x

In questo esempio viene illustrato, come e dove, intervenire per modificare il DateTime helper di default utilizzato da CakePHP 3.

Un esempio classico è quando si vuole impostare il campo “data di nascita”, il problema sta nel fatto che il sistema propone di default l’anno nel range di 5 dalla data corrente, ovvero se siamo nel 2016, il sistema nella tendina dell’anno propone i valori dal 2011 al 2021. Per modificare questo comportamento standard è possibile intervenire passando degli options come di seguito:

<?php 

/**
 * Stampa a video il widget datetime
 */
echo $this->Form->datetime('data_nascita', ['minYear' => date('Y') - 100, 'default' => time()]);

Questo esempio mostra a tendina gli ultimi 100 anni a partire dalla data odierna. Tutte le altre opzioni opzioni che è possibile inserire sono le seguenti:

  • monthNames se false, mostra il mese in maniera numerica con 2 numeri, es. 01 per Gennaio.
  • minYear l’anno più basso da mostrare nel menù a tendina.
  • maxYear l’anno più alto da mostrare nel menù a tendina.
  • interval intervallo per i minuti. Di default è impostato a 1.
  • empty se true, visualizza tutti i menu a tendina vuoti.
  • round impostare up o down se si vuole forzare l’arrotondamento in entrambe le direzioni. Il valore di default è null.
  • default il valore di default utilizzato dall’input. Il valore in $this->request->data sovarscrive il valore del campo. Se non impostato il campo utilizza la funzione time() per impostare il valore di default.
  • timeFormat usato per impostare il formato orario a12 o 24.
  • second se true abilita la visualizzazione del menù a tendina dei secondi.

Un altro esempio è il template dell’Helper. Per controllare l’ordine dei campi, e tutti gli elementi / contenuti tra i campi è possibile sovrascrivere il template dateWidget. Per impostazione predefinita, il template dateWidget è:

{{year}}{{month}}{{day}}{{hour}}{{minute}}{{second}}{{meridian}}

E’ possibile modificare l’ordine di visualizzazione dei campi, per esempio volendo inserire i campi con l’ordine della data in italiano, e gli stili Bootstrap per i campi in linea, andremo a modificare il tutto come di seguito:

<?php

/**
 * Imposta il template per il dateWidget in stile  Bootstrap
 */
$this->Form->templates([
    'dateWidget' => '<ul class="list-inline"><li class="day">{{day}}</li><li class="month">{{month}}</li><li class="year">{{year}}</li></ul>'
]);

Lo script potrà essere impostato sia livello globale nel file src/View/AppView.php che nei singoli template in cui si vuole personalizzare il template e modificarlo rispetto alla visualizzazione standard.

Lascia un commento