Siete qui:

  1. Home
  2. Blog
  3. P4A Framework: gestione dei campi data

P4A Framework: gestione dei campi data

Alessandro Scoscia • 24 novembre 2007 18:30

Logo del framework P4A

P4A è un framework php object oriented che sto utilizzando per sviluppare webapplication. Per una sua breve recensione si può leggere questo post di Mario Spada.

Il framework è molto completo e ben scritto ma la sua documentazione è piuttosto carente. Molte delle informazioni che sarebbero utili agli sviluppatori sono disperse nel forum e la loro ricerca spesso risulta macchinosa. Peggiora le cose uno strano comportamento del gestore del forum di sourceforge (sito sul quale il framework è disponibile) che non presenta i thread in ordine cronologico e che obbliga il lettore a riordinare mentalmente gli interventi per seguirne il susseguirsi.

In questo post vorrei riassumere molto brevemente la tecnica che utilizzo per la gestione delle date. P4A supporta i18n e mette a disposizione una serie di metodi che permettono la gestione dei campi data o money nelle varie lingue.

La prima cosa da fare, generalmente nella pagina principale dell'applicazione, è indicare la localizzazione che ci interessa (in questo caso quella italiana):

define("P4A_LOCALE", 'it_IT');

Questo definizione iniziale è molto importante in quanto influenza la presentazione dei dati in tutte le maschere che compongono l'applicazione.

Ogni volta che in una maschera deve essere presentata una data, sia essa in un field o in una cella di una table, questa dovrebbe essere formattata nel modo in cui l'utente è abituata a visualizzarla. Qualora poi questo dato debba essere memorizzato in una tabella di database (mysql o altro), occorre fare attenzione a non cercare di memorizzare la rappresentazione del dato preparata per l'utente, ma il dato espresso nel formato standard che il db richiede. Generalmente questa trasformazione si ottiene rimuovendo il formato applicato.

Analizziamo un breve esempio. Supponiamo che in una maschera si abbia la necessità di presentare un campo data sia in una table di p4a che in un field. Il modo più pratico è definire un metodo privato (esempio: setFieldsProperties) della classe che si occupi della formattazione dell'interfaccia grafica (posizionamento dei componenti, dimensionamento e formattazione).

  1. private function setFieldsProperties()
  2. {
    1. $p4a =& p4a::singleton();
    2. $fields =& $this->fields;
    3. //Formattazione layout: size e label
    4. ...
    5. //Formattazione della data di inserimento in un campo della maschera
    6. $fields->data_inserimento->setFormat("datetime","date_default");
    7. //Formattazione della data di inserimento nella table della maschera
    8. $table->cols->data_inserimento->setFormat("datetime","date_default");
  3. }

Per fare in modo che questa funzione sia richiamata ad ogni reload della pagina, non è sufficiente metterla nel costruttore della maschera. Occorre invece eseguire l'override del metodo “main”.

  1. function main()
  2. {
    1. $this->setFieldsProperties();
    2. parent::main();
  3. }

In questo modo si ha la garanzia che la rappresentazione del dato a video sia corretta. Da notare che la definizione della costante P4A_LOCALE influenza anche l'aspetto del widget calendar normalmente utilizzato per semplificare l'inserimento dei dati.

Infine, per gestire la corretta memorizzazione della data in un database (mysql in questo caso), occorre eseguire l'override del metodo saveRow e rimuovere la formattazione richiesta in setFieldsProperties.

  1. function saveRow()
  2. {
    1. $this->fields->data_inserimento->unsetFormat();
    2. parent::saveRow();
  3. }

Commenti

Non ci sono commenti

Inserisci un commento

I campi contrassegnati con " * " sono obbligatori




Creative Commons License Valid XHTML 1.1 Valid CSS [Valid RSS] Powered by SmartControl