Ultimamente mi è capitato sotto le mani un sito in
drupal. Per chi non lo conoscesse, Drupal è un cms ben strutturato e flessibile fino all'osso. E' incredibile quanto sia semplice realizzare un proprio tema personalizzato, perfino conoscendo solo html e css. Ovviamente se si vuole personalizzare anche le funzioni, i form e tutto il resto dobbiamo intervenire a livello di codice php. Non sono un'esperto di drupal però sto cercando di imparare il più possibile al riguardo.
Veniamo al punto di oggi. Drupal possiede un sistema di blocchi che vengono generati dal codice dei moduli. Ogni blocco è un elemento che si occupa di una determinata funzione e può essere posto in una qualsiasi area definita come regione all'interno della pagina. Esempi di blocco sono il form per il login, l'elenco degli ultimi commenti o anche un'insieme di link preferiti.
Normalmente le regioni sono inserite dentro page.tpl.php. Vediamo come inserirne una nel node.tpl.php.
Definiamo una nuova regione per il sito. Questo si effettua andando a modificare il file template.php.
Template.php /** * Dichiarazione delle regioni implementate nel tema. * * @return * Un array di regioni. */ function nomeDelTema_regions() { return array( 'left' => t('left sidebar'), 'right' => t('right sidebar'), 'content' => t('content'), 'header' => t('header'), 'footer' => t('footer') ); } |
Questa è la funzione prima della nostra modifica. Aggiungiamo una nuova regione in questo modo:
Template.php /** * Dichiarazione delle regioni implementate nel tema. * * @return * Un array di regioni. */ function nomeDelTema_regions() { return array( 'left' => t('left sidebar'), 'right' => t('right sidebar'), 'content' => t('content'), 'header' => t('header'), 'footer' => t('footer'), 'node_region' => t('node_region') //La nostra nuova regione! ); }
|
In questo modo nel pannello di visualizzazione dei blocchi (Amministra -> Struttura del sito -> Blocchi), sarà disponibile la nuova regione.
Adesso dobbiamo passare la regione al file node.tpl.php. Per fare questo alteriamo le variabili che gli vengono passate.
Aggiungiamo al file template.php la seguente funzione:
Template.php /** * Permette di alterare le variabili passate ai file del tema. * * @param $hook * Tipo di chiamata. * @param $vars * Le variabili che gli verranno passate. */ function _phptemplate_variables($hook, $vars) { //Distinguiamo il tipo di chiamata che viene fatta switch($hook) { case 'node' : //Se la chiamata è per un node $vars['node_region']= theme_blocks('node_region'); //Aggiungiamo una variabile per la nuova regione. break; } return $vars; }
|
Bene, abbiamo fatto la parte più difficile. Adesso non rimane altro che utilizzare la nuova regione :). Inseriamo nel node.tpl.php, nella posizione dove vogliamo stampare la nuova regione il seguente codice:
<? if ($node_region) { ?>
<div class="node_region"><? print $node_region ?></div>
<? } ?> |
...e abbiamo finito! Ricordatevi di inserire un blocco nella nuova regione, altrimenti non verrà visualizzato niente...
Non resta che provare il nuovo tema! :D