Un modulo ha il compito di restituire alla visualizzazione della pagina contenuti provenienti da componenti, elaborazioni di dati prelevati dalle tabelle del database(es. visite al sito) o provenienti dall'esterno appoggiandosi a servizi (es. you tube).Tenete presente che col tempo qualcosa può subire delle modifiche, il framework Joomla è in continuo aggiornamento e di conseguenza anche il CMS.
Che cos'è e cosa fa un modulo?
Un modulo si occupa di inserire nel modello di Joomla dei contenuti generati dagli script che li gestiscono, inseriti in file che rispettino il modello di costruzione di una directory "mod_".
Innanzitutto bisogna creare una cartella mod_nome_modulo che conterrà:
- il file di ingresso: mod_nome_modulo.php
- il file manifesto del modulo: mod_nome_modulo.xml
- il file che si occuperà degli script: helper.php
- il file che si occuperà del codice che raccoglie i contenuti da far apparire nella pagina (all'interno della cartella tmpl): default.php
Riassumendo, abbiamo costruito questa situazione:
mod_nome_modulo (folder)
------| mod_nome_modulo.php
------| mod_nome_modulo.xml
------| helper.php
------| index.html
------ tmpl (folder)
-----------| default.php
-----------| index.html
La parte più semplice sono i due files html, pagine bianche che impediscono la visualizzazione dei contenuti della directory qualora si tronchi la path.
Uno si posiziona nella root del modulo e uno nella cartella tmpl. Questo il codice da inserire all'interno di index.html
<html><body bgcolor="#FFFFFF"></body></html>
Il file xml mod_nome_modulo.xml, si occupa di istruire il Joomla installer e di preconfigurare il modulo, e sarà così composto:
<!-- Questa prima parte contiene i dati che visualizzeremo in amministrazione nella parte moduli installati --> <?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Nome del modulo</name> <author>Autori del modulo</author> <creationDate>Data di realizzazione</creationDate> <version>x.x.xx</version> <description>Descrizione delle features del modulo</description> <!-- Questa parte descrive i files e la loro path rispetto il modulo dei files che compongono il modulo stesso --> <files> <filename module="mod_nome_modulo">mod_nome_modulo.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> </files> <!-- Se volessimo inserire anche la gestione della lingua --> <languages> <language tag="it-IT">it-IT.mod_nome_modulo.ini</language> </languages> <!-- Qui iniziano i parametri di configurazione, ovvero i settaggi che facciamo all'interno della gestione moduli che poi recuperiamo negli script sotto forma di array params --> <params> <param name="nome_parametro" type="radio" default="0" label="Tua etichetta" description="Tua descrizione del parametro"> <option value="0">Nascondi</option> <option value="1">Mostra</option> </param> <!-- Possiamo anche settare un suffisso per la classe --> <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" /> </params> </install>
Poi abbiamo il file di ingresso mod_nome_modulo.php che si occupa di collezionare i dati necessari e di fornire un output:
// vieta l'accesso diretto a qs file defined('_JEXEC') or die('Accesso negato'); // inclusione dell'helper con la classe che si occupa della raccolta dati require_once( dirname(__FILE__).DS.'helper.php' ); // chiamata alla classe contenuta in helper.php $miavar = modNomeModuloHelper::getNomeModulo( $params ); // restituzione alla pagina require( JModuleHelper::getLayoutPath( 'mod_nome_modulo' ) );
L'ultimo di questa root è helper.php che, come vedremo quì sotto, è quello che contiene la classe e il metodo che andremo a chiamare nel file di ingresso e si occuperà di eseguire query e script per il recupero dei dati
class modContactHelper{ function getContact( $params ){ // la cosa più semplice era fare una query $db = &JFactory::getDBO(); // Oggetto db $query = "SELECT * FROM #__miatabella"; // Imposto la query $db->setQuery($query); // la eseguo $rows = $db->loadObjectList(); // recupero i dati in un'array return $rows; // Li restituisce all'esecuzione } }
A questo punto entriamo nella cartella tmpl, abbiamo un solo file nel nostro esempio minimale, default.php: è il "piccolo template" che spediremo all'output tramite l'apposito metodo (vedi file ingresso).
Recuperiamo l'array della query con il metodo creato e aggiungiamo un minimo di tag ai nostri contenuti; nell'esempio faccio un'ipotetico recupero e uso, ma capito il meccanismo, potete fare ciò che volete, es potete recuperare i dati ed elaborarli anche all'interno della classe di helper.php.
//Solito divieto di accesso diretto <?php defined( '_JEXEC' ) or die( 'Non puoi accedere' ); ?> <?php echo "<div id=\"mybox\">"; foreach ( $rows as $row ) { if($params->get( 'parametro1_dell_xml' ) && $row->myvalue1 != ""){ echo "<div class=\"item\">" . $row->myvalue1 . "</div>"; } if($params->get( 'parametro2_dell_xml' ) && $row->myvalue2 != ""){ echo "<div class=\"item\">" . $row->myvalue2 . "</div>"; } } echo "</div>";
Non rimane che zippare la cartella principale e procedere con l'upload e l'installazione attraverso l'interfaccia amministrativa del sito: Estensioni -> Installa -> Carica file e installa -> puntare la cartella zippata -> esegui.
Se l'installazione va a buon fine, viene segnalato dall'installer di Joomla, così pure il fallimento. Per quest'ultimo, il motivo può essere solo che non avete rispettato i nomi di file e/o cartelle, non avete rispettato il modello del pacchetto, c'è qualche errore o tag non chiuso nel file xml che è quello che viene letto dall'installer.
Rimanendo in questa pagina di amministrazione, cliccate sul link moduli installati, se avete compilato correttamente il file xml, i dati che avevate messo, ve li ritrovate come riga della tabella dei moduli.
Se ci sono errori nel codice ve ne accorgete ritornando al lato pubblico, lo script di installazione non verifica l'esattezza del codice.
Abilitate il debug e risolvete i problemi, solo dopo mettetelo in produzione. Non testate assolutamente estensioni su un sito esposto al web, rischiate di mostrare dati riservati a chi vi visita nel momento di un'errore, che spero siano comunque gestiti negli script del modulo che scrivete.