Sviluppo estensioni per Joomla – Capitolo 3

Continuiamo ad approfondire il libro “Learning Joomla 1.5 Extension Development“, di Joseph Le Blanc, che nel capitolo 3 introduce la gestione del database e i concetti dello sviluppo MVC.

Gestione delle tabelle

Il framework Joomla ci mette a disposizione la classe JTable per gestire le funzioni di inserimento, modifica e cancellazione dei record. Creando una nuova classe che estende JTable che fornisce le proprietà corrispondenti ai campi nella nostra tabella, possiamo gestire facilmente i dati della tabella semplicemente lavorando sulle proprietà dell’oggetto e usando poi il metodo store() per salvare un nuovo inserimento o una modifica.

Le dichiarazioni delle classi corrispondenti alle tabelle del nostro componente si collocano solitamente in uno o più file della sottocartella tables.

Nota: in tutto il codice Joomla, i nomi delle tabelle vengono indicati come #__nometabella. Il prefisso iniziale #__ viene poi sostituito dinamicamente con il prefisso specifico che abbiamo deciso di dare alle nostre tabelle durante l’installazione di Joomla (ad esempio jos_nometabella).

MVC

La separazione tra Model, View e Controller permette di mantenere un flusso di lavoro ordinato, soprattutto quando la complessità del componente cresce. In poche parole si può dire che

  • il Controller è il codice che riceve la richiesta e “smista” il lavoro di conseguenza invocando la relativa vista (View);
  • la View è il codice che si occupa di fornire i dati richiesti e/o i risultati dell’elaborazione;
  • il Model è il codice, invocato dalla View, che si occupa interagire con il database.

In sostanza, se programmando in maniera tradizionale abbiamo un unico file PHP che riceve la richiesta, la elabora, e produce un output, con MVC questi compiti sono invece separati tra diversi componenti.

MVC è un Design Pattern non specifico di Joomla; può essere usato in altri contesti e linguaggi.

Scendendo nell’applicazione pratica di questo sistema in Joomla, possiamo dire che il Controller è solitamente un unico oggetto, dichiarato come estensione della classe JController di Joomla, che può essere dichiarato nella pagina principale del componente (es. …/com_restaurants/restaurant.php) o in un file separato che viene incluso nella pagina principale.

Nella sottocartella “views” avremo solitamente un file PHP per ciascuna View, e lo stesso dicasi per la sottocartella “models”. Di default, ogni View invoca il Model omonimo; è possibile però forzare più View a usare lo stesso Model, per evitare ripetizioni di codice.

A questo punto, nel libro vengono riportati alcuni esempi specifici di creazione di Views e di Models, che ci aiutano a capire come tali componenti interagiscono tra di loro.

Tutto MVC?

E’ chiaro che per funzionalità molto contenute la creazione di tutti questi elementi separati può apparire più onerosa rispetto alla scrittura di un semplice file PHP che genera un output. Inoltre, ci vuole un minimo di logica e di esperienza di programmazione (soprattutto programmazione a oggetti) per trovarsi a proprio agio con questo sistema di sviluppo.

Ecco perchè non vi dovrete stupire di trovare estensioni che non usano il sistema MVC. Si tratta però di una tendenza in via di estinzione: tutte le estensioni incluse nel pacchetto base, nonchè le più importanti estensioni esterne, applicano questo sistema per essere più coerenti con il framework di base; anche perchè il sistema MVC, una volta attivato, vi permette di essere molto più produttivi nelle fasi successive.

Famose eccezioni…

Proprio Virtuemart, il progetto che seguiamo più da vicino dato che facciamo parte anche del team di sviluppo, non usa ancora un sistema MVC nella versione attuale, ovvero la 1.1.x. La notizia positiva è che invece la nuova versione 1.5, in piena fase di realizzazione, lo farà. Quindi anche il codice di Virtuemart diventerà facilmente e correttamente gestibile.


GiBiLogic srl Società a socio unico  |  via Aldo Moro 48, 25124 Brescia  |  P.IVA 02780970980
REG.IMPRESE N.02780970980 BRESCIA  |  CAP. SOC. € 10.000 I.V.
info@gibilogic.com  |  +39.030.7778980

iubenda Certified Gold
Partner