Menu gerarchico in Drupal con i tag e Views

Pubblicato da Nicola Rainiero il 16-12-2012 (aggiornato il 18-05-2015)

In questo articolo illustrerò come sfruttare i tag opportunamente raggruppati o meglio relazionati, per creare un blocco con Views contenente un menu gerarchico che richiama i propri contenuti. Nel mio caso ho anche dovuto realizzare un modulo ad-hoc per poter visualizzare i tag localizzati con quelli indipendenti dalla lingua.

Nell'articolo precedente, Tag Cloud in Drupal con Views e Taxonomy, avevo introdotto brevemente il concetto di tassonomia e la sua implementazione in Drupal. Oggi sottolineo una caratteristica ulteriore che tornerà utile nello sviluppo della guida, ovvero l'impostazione della RELAZIONE (padre --> figli) dei tag. Questa operazione si può fare tranquillamente a video da questa pagina http://mio_sito/admin/structure/taxonomy/tags, spostando con il mouse i tag figli all'interno del tag che diventerà padre. Ricordandosi poi di salvare, per non dover rifare tutto da zero!

Il menu gerarchico

Senza entrare troppo nei dettagli mostro il mio elenco di tag:

Elenco dei miei tag in Drupal

E questo è il blocco con il menu localizzato rispettivamente per l'italiano e l'inglese:

Menu in italianoMenu in inglese
menu in italianomenu in inglese

Come si può vedere solo i tag raggruppati padre-figlio vengono mostrati nel menu, gli altri sono esclusi. Per esempio questo articolo è stato taggato con: web, drupal, views e moduli. Quindi comparirà quando si cliccherà sul menu web o drupal. Nulla toglie visto che ho molto trattato l'argomento Drupal e Views di creare un nuovo menu con voce padre drupal e figlio views, magari in futuro!

Le impostazioni in Drupal

In modo del tutto analogo a quanto spiegato nell'articolo sul Tag Cloud si crea una nuova vista collegandosi qui: http://mio_sito/admin/structure/views. Le impostazioni sono le stesse solo che chiaramente cambierà il nome (in View name, con molta fantasia ho messo Menu_gerarchico) e il Display format in Create a Block (settato non più su Unformatted list ma Grid).

Per prima cosa si va in Advanced e si aggiunge in RELATIONSHIP Termine della tassonomia: Termine padre (Taxonomy term: Parent term).

Poi in FIELDS si aggiungono (Genitore) Taxonomy term: Name e Taxonomy term: Name



(Genitore) Taxonomy term: NameTaxonomy term: Name

In FILTER CRITERIA si aggiunge (Genitore) Taxonomy vocabulary: Machine name (= Tag)

In SORT CRITERIA infine si aggiungono (Genitore) Taxonomy term: Name (asc) e Taxonomy term: Name (asc)



(Genitore) Taxonomy term: Name (asc)Taxonomy term: Name (asc)

Infine su FORMATO: Grid | Settings, si clicca sull'ultima voce e la si personalizza in questo modo:

Spero di aver azzeccato l'esatto ordine dei passaggi da fare, perché sono andato a memoria!

PROBLEMA: se si va a guardare la preview si noterà che il menu generato non tiene conto della localizzazione e visualizza tutti i tag presenti. Per ovviare a ciò ho seguito quanto suggerito in questa discussione, creando il modulo: Taxonomy Views Translator.

Modulo per correggere la localizzazione del menu

Il modulo in questione è formato da due semplici file di testo (taxonomy_views_translator.info e taxonomy_views_translator.module), racchiusi in una directory nominata taxonomy_views_translator da copiare in ftp:mio_sito/sites/all/modules/ ed infine da attivare collegandosi in http://mio_sito/admin/modules (il modulo è all'interno di OTHERS). Per approfondire la conoscenza dei moduli in Drupal rimando a questo link, qui sotto invece riporto il codice contenuto nei due file per far funzionare il modulo.

taxonomy_views_translator.info:

name = Taxonomy Views Translator 
description = Provides taxonomy automatically translated in views
core = 7.x
files[] = taxonomy_views_translator.module

taxonomy_views_translator.module:

<?php 
function taxonomy_views_translator_views_query_alter(&$view, &$query) {
if ($view->name == 'menu_gerarchico') {
$query->where[] = array(
'conditions' => array(array(
'field' => 'taxonomy_term_data.language',
'value' => array('***CURRENT_LANGUAGE***','und'),
'operator' => 'in',
)),
'args' => array(),
'type' => 'AND',
);
}
}
?>

Rispetto all'originale ho modificato la seguente riga:

'value' => array('***CURRENT_LANGUAGE***'),

In:

'value' => array('***CURRENT_LANGUAGE***','und'),

Per avere sia i termini localizzati sia quelli indipendenti dalla lingua (per intenderci i tag PDF, drupal, etc.).

 


Di seguito inserisco le due immagini con le impostazioni della vista e allego nell'archivio menu_relationships.zip, sia il file esportato export_menu_relationships.txt con tutte le impostazioni (lo si può caricare cliccando sul bottone importa e poi incollandoci il contenuto dentro il box Paste view code here, ma attenzione alle eventuali incompatibilità), sia il modulo completo della sua directory per l'installazione in Drupal.



Parte sinistraParte destra



Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.