Fin'ora dei moduli sappiamo che appaiono nel blocco centrale della pagina ciascuno con la sua funzione, che sono scritti in file PHP contenuti nella cartella "modules" e che ciascun modulo possiede una parte necessaria alla visualizzazione per gli utenti finali (all'interno del blocco centrale) ed una parte di che serve per l' amministrazione.
Per chi ha dimestichezza con il linguaggio PHP realizzare un modulo può essere una procedura semplice, per chi invece non si sente troppo ferrato con questa tecnologia iniziamo insieme a crearne uno.
Possiamo vedere come inserire un modulo vuoto. Nella cartella "modules" creiamo una nuova cartella che chiamiamo "prova".
All'interno di questa cartella creiamo i file in php che eseguiranno le operazioni di cui abbiamo bisogno. Ora nel pannello di amministrazione dei moduli appare la voce che abbiamo appena creato:
Vediamo ora come richiamare i moduli all'interno delle nostre pagine. L'accesso è mediato da un componente di PHP Nuke che possiamo chiamare "module manager", ed è accessibile chiamando il file modules.php.
Il module manager gestisce varie operazioni, la principale è modload, selezionata impostando appropriatamente la variabile "op".
Per la precisione, la stringa URL completa che in generale consente di accedere ad un modulo è:
http://www.sito.it/modules.php?op=modload&name=Oroscopo_del_Giorno&file=index&func=one
Esaminiamo la stringa di richiesta. Anzitutto occorre utilizzare il nome del modulo, che è modules.php. Questo modulo prende una serie di parametri: il parametro "op" è essenziale: infatti seleziona la funzione di caricamento modulo.
Il modulo da caricare viene specificato con l'opzione "name" e poiché un modulo può essere composto da più file, il parametro "file" si occupa di selezionare quello che vogliamo. Di solito è semplicemente l'index.
Inoltre possiamo aggiungere alla stringa altri parametri, specifici del modulo: tipicamente si specificano parametri per selezionare le sotto-funzioni del modulo. Questi parametri funzionano in modo analogo a "op", solo che sono sfruttati internamente al modulo, e per questo motivo non possono prendere il nome di "op" per non causare ambiguità.
Insieme a "op" vi sono altre variabili che non vanno usate. Queste prendono il nome di variabili riservate e sono le seguenti:
$index, $name, $file, $op
Le ultime tre le abbiamo già viste, sono appunto i parametri standard che vengono passati a al modulo. La variabile $index indica se il modulo corrente deve essere visualizzato a tre colonne oppure due.
L'URL di richiamo del modulo deve essere generata anche quando si usano dei form. Nel caso volessimo richiamare il modulo da un form, aggiungeremmo un codice simile a questo:
<form action="modules.php">.
<input type="hidden" name="op" value="modload" />
<input type="hidden" name="name" value="prova" />
<input type="hidden" name="file" value="index" />
<input type="hidden" name="func" value="one" />
...
</form>
In questo modo i parametri che servono a richiamare il modulo vengono presi dai campi del form invece di essere espressi direttamente nella stringa di richiesta.
Applichiamo quanto detto e realizziamo un semplice modulo che visualizza un elenco di varie opzioni.
Il codice del modulo è contenuto nel file modules/prova/index.php. Le regole di codifica dei moduli impongono che il modulo abbia una intestazione che impedisca l'accesso ad utenti non autorizzati. Il codice comincia così:
if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
Il corpo del modulo implementa innanzitutto una funzione di selezione delle possibili opzioni che fornisce:
$index = 1;
// a 3 colonne
include("header.php");
OpenTable();
switch($fn) {
case "det": dettaglio(); break;
default: elenco(); break;
}
CloseTable();
include("footer.php");
Notiamo l'inclusione della intestazione all'inizio, e del footer alla fine. Il corpo del modulo invece consiste in una selezione per decidere se richiamare la funzione dettaglio(), o elenco().
Il dettaglio viene richiamato quando è stato selezionato una particolare opzione da visualizzare; questo viene deciso dal fatto che il parametro "fn" assume il valore "det".
In alternativa, e come comportamento predefinito, viene richiamato l'elenco. Ecco il codice che produce l'elenco:
function elenco() {
$q = mysql_query("SELECT voce FROM menu ORDER BY ordine");
echo "<h1 align='center'>Scegli il testo</h1>n";
echo "Scegli la voce che ti interessa.<br>";
echo "<ul>n";
while($r = mysql_fetch_row($q)) {
echo "<li><a href='modules.php".
"?op=modload&name=prova".
"&file=index&fn=det&seg=$r[0]'>$r[0]</a></li>";
}
echo "</ul>";
}
Come è prevedibile, eseguiamo una interrogazione al database che seleziona il testo di tutte le opzioni. Il collegamento richiama il modulo stesso, stavolta con fn=det, citando quale testo si vuole visualizzare. Il codice della funzione che visualizza il dettaglio è il seguente:
function dettaglio() {
global $seg;
$previsioni = mysql_fetch_row(mysql_query("SELECT testo FROM menu WHERE voce='$seg'"));
echo "<h1 align='center'>Testo : $seg</h1>";
echo "<blockquote><b>$previsioni[0]</b></blockquote>";
}
ovvero una interrogazione che visualizza il testo della voce di menu selezionata.
Abbiamo visto un semplicissimo esempio ma le opportunità di personalizzare i moduli sono veramente infinite. Il consiglio perciò è quello di fare affidamento alle numerosissime comunità di sviluppatori per trovare il modulo che ci serve, ed eventualmente provvedere a modificarlo a seconda dei nostri bisogni.