Di cosa è composto un modulo in Drupal 7?
Prima di iniziare a creare il nostro modulo, parliamo un po’ delle potenzialità delle API di Drupal. Le API offrono ampie possibilità per lavorare con Tassonomia, nodi, utenti, e per leggere e scrivere dati nel database. Per permettere l’interazione tra i moduli e il core di Drupal, nonché tra i moduli stessi, Drupal utilizza un sistema di hook. Un hook è una chiamata di ritorno (callback): quando l’esecuzione del codice arriva a un determinato hook, viene inserito e eseguito anche il codice della nostra funzione, che abbiamo definito nel nostro modulo. In questo modo possiamo elaborare dati relativi a utenti, menu, tassonomie o nodi di diversi tipi di contenuto.
Alla pagina:
http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7
è riportato l’elenco degli hook del core di Drupal. Nota che per ogni versione del core, l’elenco degli hook può variare. Io intendo creare un modulo per Drupal versione 7, quindi utilizzeremo gli hook relativi alla versione 7.
Gli hook in Drupal hanno la seguente struttura:
NomeModulo_NomeHook
Quindi, dove nel nome dell’hook appare la parola “hook”, bisogna sostituirla con il nome del proprio modulo, nel quale l’hook viene implementato.
Per iniziare dobbiamo creare il modulo vero e proprio.
1. Creiamo nella cartella sites/all/modules
una nuova cartella con il nome del modulo. Io chiamerò il modulo site-made.
2. Nella cartella del modulo creiamo due file: NomeModulo.info e NomeModulo.module. Nel mio caso saranno sitemade.info e sitemade.module.
3. Ora, nel file sitemade.info, scriviamo il seguente contenuto:
;$Id$ // questo commento è necessario per semplificare il caricamento del modulo su drupal.org name = Sitemade module // nome del nostro modulo nell’elenco dei moduli package = sitemade // nome del pacchetto a cui appartiene il modulo core = 7.x // versione di Drupal per cui viene creato il modulo files[] = sitemade.module // nel vettore files elenchiamo i file PHP del modulo
Nel file sitemade.module scriviamo l’inizio del codice PHP:
<?php // il tag può anche non essere chiuso //$Id$ // aggiunto anche qui per comodità di caricamento su drupal.org
Ora il nostro modulo dovrebbe apparire tra gli altri moduli. Attiviamolo:
Ora che il modulo è attivato, possiamo aggiungere del codice. Propongo di rimuovere il blocco testuale History (Cronologia) dalla pagina dell’utente:
Per prima cosa vediamo come funziona: ci servirà l’hook hook_user_view:
http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view/7
Il significato di questo hook è il seguente: quando Drupal esegue il codice necessario per visualizzare la pagina di un utente, include anche l’hook del nostro modulo nel flusso di esecuzione. Nel nostro modulo rimuoveremo dal vettore $account le informazioni sulla cronologia dell’utente. Apriamo il file sitemade.module e inseriamo il seguente codice:
function sitemade_user_view($account, $view_mode, $langcode){ print_r($account); }
Salvate il file del modulo e svuotate la cache di Drupal: è necessario per far sì che l’hook venga registrato nel codice. Ora, nella parte superiore della pagina, apparirà un elenco di parole:
In realtà si tratta dell’array $account che ci viene fornito da hook_user_view, e la funzione print_r() visualizza semplicemente l’intero array nella pagina. Se utilizzi Mozilla Firefox (che consiglio per lo sviluppo web), premi CTRL+U per visualizzare il sorgente della pagina e potrai vedere la struttura dell’array.
Presta attenzione ai campi uid e name: contengono rispettivamente l’ID dell’utente e il suo nome. Questi campi vengono spesso utilizzati per creare link ai profili o ai contenuti generati dagli utenti.
Come puoi vedere, qui ci sono solo i dati dell’utente, ma non ci sono informazioni sul blocco “History”. Proviamo allora a utilizzare un altro hook: hook_user_view_alter:
http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view_alter/7
Modifichiamo il codice del modulo in questo modo:
function sitemade_user_view_alter($account, $view_mode, $langcode){ print_r($account); }
Salvate le modifiche. L’array visualizzato dovrebbe cambiare: ora $account è solo un campo all’interno dell’array, e nel campo summary si trovano le informazioni relative al blocco “History”. Proviamo a rimuovere queste informazioni per vedere cosa succede. Usiamo la funzione unset() per eliminarle:
function sitemade_user_view_alter($account, $view_mode, $langcode){ unset($account['summary']); print_r($account); }
Nel mio caso, il campo summary è stato rimosso, ma il blocco “History” è rimasto. Perché? Perché nei parametri della funzione la variabile è indicata semplicemente con il simbolo $. Ciò significa che stiamo ricevendo i valori dell’utente in una variabile locale $account, ma le modifiche non vengono propagate alla variabile originale. Per far sì che le modifiche abbiano effetto, dobbiamo passare la variabile per riferimento aggiungendo un & davanti al suo nome. Aggiungiamo quindi l’ampersand.
function sitemade_user_view_alter(&$account, $view_mode, $langcode){ unset($account['summary']); print_r($account); }
Salvate le modifiche al file e svuotate la cache. Ora il blocco “History” dovrebbe scomparire. Il simbolo & crea un riferimento alla variabile $account. Per approfondire il concetto di riferimento in PHP, potete consultare qualsiasi manuale di programmazione in PHP.