Skip to main content

Mastering Joomla 1.5 Extension and Framework development – 3

Nel terzo capitolo del libro Mastering Joomla 1.5 Extension and Framework development ci si dedica al database.

Vediamo i punti più interessanti.

Convenzioni

Esistono una serie di convenzioni nell’utilizzo degli oggetti del database. Nel file di installazione e all’interno di un eventuale componente personalizzato le nostre tabelle devono essere riferite con il prefisso “#__” che verrà poi sostituito dal vero e proprio prefisso che abbiamo scelto durante l’installazione di Joomla (ad esempio “jos_“).

Inoltre, se il nostro componente ha più tabelle, dovrebbero tutte raggruppate tramie un prefisso specifico, ad esempio:

  • #__cs_pratiche
  • #__cs_luoghi

Infine, i nomi dei singoli campi dovrebbero essere minuscoli, e dovrebbero utilizzare gli underscore, ad esempio:

  • id
  • nome
  • data_inserimento

Eseguire query e reperire dati

Il metodo JFactory::getDBO() ci restituisce una istanza dell’oggetto JDatabase globale. Tramite questo oggetto è possibile impostare ed eseguire query, ad esempio:

$db =& JFactory::getDBO();
$query = "INSERT INTO #__mytable VALUES ( 'one', '2011-04-23');
$db->setQuery( $query );
$db->query();

Per reperire dati, tuttavia, l’ultimo passaggio (il metodo query() ) viene preferibilmente sostituito da uno dei metodi di caricamento dei dati:

  • loadResult
  • loadResultArray
  • loadRow
  • loadAssoc
  • loadObject
  • loadRowList
  • loadAssocList
  • loadObjectList

Ciascuno di questi metodi si differenzia perchè restituisce solo una parte dei dati o a seconda del formato dei dati ricevuti. Per esperienza personale, posso dire che loadObject e loadObjectList diventano presto i nostri metodi preferiti.

JTable

Possiamo costruire un ulteriore livello intermedio tra il database e la nostra estensione tramite l’uso della classe JTable, o meglio di sottoclassi che la estendono.

Nella sottocartella “tables” del nostro componente si crea un file per ciascuna tabella, che contiene la relativa classe. Questa classe si collega ai campi nella tabella, in modo tale che:

  • i metodi di estrazione e salvataggio di record interi risultano semplificati, dato che non abbiamo bisogno di specificare i campi;
  • possiamo aggiungere una serie di metodi personalizzati di validazione dei dati
  • possiamo effettuare operazioni aggiuntive (ad esempio conversione tra diversi formati numerici o di data) collegati all’estrazione e al salvataggio, togliendoli dal flusso principale del nostro componente che quindi diventa più semplice

 

 

$db->