Programmare in Drupal ed estenderne le funzionalità è molto semplice grazie all'API Drupal che offre un alto grado di flessibilità. Nell'ambito della modifica dell'output troviamo la funzione theme()
e tutte le funzioni theme_*()
, che si occupano di generare l'output.
Chi sviluppa temi per Drupal ha spesso la necessità di modificare come i dati vengono presentati all'utente. A volte attraverso moduli ad hoc, altre volte con dei semplici fogli di stile oppure sovrascrivendo le funzioni del core (override).
Esempio pratico: come aggiungere uno <span> per racchiudere una voce del menu Drupal
Nei template Drupal troviamo un file particolare, template.php, attraverso il quale si possono riprogrammare i comportamenti di default di Drupal. In questo esempio pratico verrà mostrato come modificare l'output dei link nel menu di Drupal per racchiuderli all'interno di uno <span>...</span>
. Questa operazione, ad esempio, può essere necessaria per specifiche esigenze grafiche.
Una voce di menu solitamente viene renderizzata nella forma:
<li><a [...]>Nome collegamento</a></li>
Il nostro obiettivo è quello di racchiudere il testo del link in uno <span>...</span>
, e quindi ottenere:
<li><a [...]><span>Nome collegamento</span></a></li>
Come modificare theme_links()
La funzione theme_links() si occupa di creare un insieme di link.
theme_links($links, $attributes = array('class' => 'links'))
I parametri sono un vettore di link ed un vettore di attributi. La funzione restituirà il codice HTML sotto forma di lista non ordinata. Il codice completo della funzione è visualizzabile nel sito Drupal API: theme_links().
La modifica per racchiudere il testo del link è piuttosto semplice. La riga che aggiunge il link all'output è:
$output .= l($link['title'], $link['href'], $link);
Ricordo che la funzione l()
crea un link in base ai parametri che gli vengono passati. Il primo parametro sarà la stringa di ancoraggio del link. È su questo parametro che si dovrà intervenire.
Quindi si può facilmente intuire che $link['title']
va modificata in questo modo:
$link['title'] = '<span>' . check_plain($link['title']) . '</span>';
Inoltre, si rende necessaria una ulteriore modifica al vettore $link
in quanto ora viene passato come argomento un frammento HTML e non più un testo semplice:
$link['html'] = TRUE;
Come si effettua l'ovveride della funzione theme_links()?
La procedura è molto semplice: si deve ricopiare la funzione originale nel file template.php del template Drupal in uso e cambiarne il nome seguendo la convenzione di Drupal. In questo caso:
NomeDelTemplate_links()
e modificare le righe di codice che ci interessano, ovvero precedere la riga:
$output .= l($link['title'], $link['href'], $link);
con il seguente codice:
$link['title'] = '<span>' . check_plain($link['title']) . '</span>'; $link['html'] = TRUE;
A questo punto non rimane altro che pulire la cache di Drupal.
Ultimi commenti
8 years 2 settimane fa
8 years 4 settimane fa
8 years 4 settimane fa
8 years 17 settimane fa
8 years 17 settimane fa
8 years 17 settimane fa
8 years 18 settimane fa
8 years 18 settimane fa
8 years 19 settimane fa
8 years 19 settimane fa