Drupal cerca i moduli da installare nelle directory e sottodirectory:
/modules contiene i moduli di sistema (core)
/sites/all contiene altro tra cui moduli propri.
E’ consigliato creare una sottodirectory per i moduli aggiuntivi.
/sites/all/modules
I file principali del modulo , che devono essere contenuti in /sites/all/modules/miomodulo si devono chiamare :
Un modulo può essere di tipo:
Block module
Sono moduli che generalmente vengono posizionati sulle barre laterali. Drupal chiama la funzione miomodulo_block($op=='view') con opzione uguale a view per ottenere il contenuto del blocco. In particolare Drupal si aspetta un array $block di ritorno con i seguenti valori impostati:
$block['subject'] = t('MioModulo');
$block['content'] = contenuto del blocco;
Node module
Sono moduli che generalmente generano pagine di contenuto come blog, forum, book pages.
Le funzioni minime che è bene definire per un modulo sono:
IN FASE DI REALIZZAZIONE
Elenco degli hook principali
Drupal chiama tutte le funzioni hook_exit() implementate nei moduli attivi, per avvisare che la pagina richiesta è stata inviata e che le operazioni da attivare sono terminate.
L' hook exit può essere utile per eseguire un debugging del sistema o aggiornare, in fase di chiusura della pagina, alcune tabelle associate ai moduli.
Due moduli di sistema che usano questo hook sono:
Drupal chiama tutte le funzioni hook_load() implementate nei moduli attivi, per aggiungere campi non predefiniti nell'oggetto nodo.
Ad esempio una rubrica telefonica può avere campi come indirizzo, telefono etc. con un modulo rubrica che implementa la funzione rubrica_load (&$nodo)
Premesso che , l’accesso ad un modulo viene impostato tramite la pagina Gestione utenti->Controlli accessi.
In questa pagina compaiono per ogni modulo i permessi associati ad esso e per ogni permesso a quale ruolo è assegnato il permesso.
I ruoli per default sono due: anonymous user e authenticated user.
E’ possibile aggiungere altri ruoli utilizzando la pagina Gestione utenti->Ruoli.
Detto questo, le descrizione dei permessi che compaiono nella pagina Gestione utenti->Controlli accessi sono definite mediante la funzione:
<?php
function miomodulo_perm()
{
return array(
"amministra contenuti miomodulo",
"crea contenuti miomodulo");,
}
?>Qui sopra sono riportati solo due permessi, ma ovviamente ne potrebbero essere definiti altri. E' bene inserire sempre il nome nel modulo per ogni permesso. In caso contrario Drupal potrebbe assegnare la stringa di permesso a più moduli, creando seri problemi all'impianto di sicurezza.
Per verificare se l’utente corrente ha determinati permessi usare la funzione user_access()
<?php
if (!user_access("amministra contenuti miomodulo")) {
$form['error'] = array('#type' => 'item',
'#title' => t("Non sei autorizzato ad accedere a miomodulo."));
return $form;
}
?>Versioni precedenti alla 5.0 di Drupal usavano la funzione message_access() ora deprecata.
Pagina dei moduli
Nella pagina dei moduli le descrizioni associate al modulo provengono dal file miomodulo.info contenuto nella directory del modulo. All’interno del file sono contenute almeno le prime due variabili:
$Id$ name = miomodulo description = "Descrizione MioModulo" dependencies = modulo1 modulo2 modulo3 package = MieModuli
con i seguenti significati
Pagina dei blocchi
Nome del blocco nella lista blocchi
Funzione miomodulo_block($op=’list’)
Esempio:
<?php
function miomodulo_block($op = 'list', $delta = 0)
{
if ($op == "list")
{
$block[0]["info"] = t('MioBlocco');
return $block;
}
}
?>* Descrizione dell'help all’interno della configurazione del blocco
Funzione miomodulo_help($section = "")
Come definito al paragrafo Accesso ai moduli:permessi, i permessi di accesso ai moduli sono definiti mediante la funzione miomodulo_perm()
<?php
function miomodulo_perm()
{
return array("amministra contenuti miomodulo",
"crea contenuti miomodulo");
}
?>Il valore di $section deve essere verificato posizionando il cursore sul link ‘configura’ della pagina dei blocchi e vedere a quale percorso punta. Generalmente è admin/build/block/configure/MioBlocco/0 e quindi scrivere la funzione miomodulo_help() nel seguente modo:
<?php
function miomodulo_help($section = "")
{
$output = "";
switch ($section)
{
case "admin/build/block/configure/MioBlocco/0":
$output = "<p>" . t("Descrizione di MioBlocco") . "</p>";
break;
default:
}
return $output;
}
?> Pagina del controllo accessi utenti
Come definito al paragrafo Accesso ai moduli:permessi, i permessi di accesso ai moduli sono definiti mediante la funzione miomodulo_perm()
<?php
function miomodulo_perm()
{
return array("amministra contenuti miomodulo",
"crea contenuti miomodulo");
}
?>Quando un modulo ha fogli di stile propri, questi devono essere caricati prima di visualizzare il contenuto della pagina generata dal modulo. Nella pagina HTML generata da Drupal i file di stile compaiono secondo la sequenza:
stile/i del modulo corrente
stile/i del modulo corrente contenuti nel tema corrente
stili di default di Drupal
stili del tema corrente
come di seguito indicato.
<style type="text/css" media="all">@import "/sites/all/modules/miomodulo/miomodulo.css"</style>
<style type="text/css" media="all">@import "/sites/all/themes/miotema/miomodulo.css"</style>
<style type="text/css" media="all">@import "/modules/book/book.css"</style>
<style type="text/css" media="all">@import "/modules/node/node.css"</style>
<style type="text/css" media="all">@import "/modules/system/defaults.css"</style>
<style type="text/css" media="all">@import "/modules/system/system.css"</style>
<style type="text/css" media="all">@import "/modules/user/user.css"</style>
...
<style type="text/css" media="all">@import"/sites/all/themes/miotema/style.css"</style>
Per fare questo è utilizzata la funzione drupal_add_css() secondo il codice riportato.
L'esempio riporta il codice necessario per caricare il foglio di stile miomodulo.css.
Questo codice deve essere chiamato dalle funzioni del modulo che preparano codice HTML.
function miomodulo_css_file() {
$css_files = array(); // array in cui definire i file css
// Definisce i percorsi dei file di stile
$file_css_modulo = drupal_get_path('module', 'miomodulo') . '/miomodulo.css';
$file_css_modulo_in tema = path_to_theme() . '/miomodulo.css'; // se esistente
// Definisce nell'array lo stile di default del modulo
$css_files[] = array('file' => $file_css_modulo, 'type' => 'module', );
/*
Definisce nell'array lo stile ripetuto nella directory del tema corrente
Se esiste un file di stile nella directory del tema corrente
con lo stesso nome dello stile del modulo lo carica.
*/
if (file_exists($file_css_modulo_in tema) {
$css_files[] = array('file' => $file_css_modulo_in tema, 'type' => 'theme', );
}
// Avvisa Drupal di caricare i fogli definiti
foreach ($css_files as $css_file)
{
drupal_add_css($css_file['file'], $css_file['type'], 'all', false);
}
}