Mini HOWTO: come usare un nodo per la descrizione di un termine (senza moduli aggiuntivi)

In questo howto prendo in considerazione l'use case in cui vi sia la necessità di una descrizione più articolata e flessibile per un termine; la procedura descritta da per scontato che si utilizzi una vista per sovrascrivere le pagine dei termini della tassonomia (taxonomy/term/TID) e che il vocabolario in esame sia a selezione singola e non multipla.

Obiettivo: la pagina di ciascun termine (appartenente ad un dato vocabolario, in questo caso) deve includere, oltre che la lista dei nodi taggati con tale termine, anche una descrizione articolata del termine stesso da poter inserire come blocco, allegato o come tab aggiuntiva alla pagina del termine.

Procedura:

  • Creare un nuovo tipo di contenuto "descrizione"
  • Associare questo tipo di contenuto al vocabolario ai cui termini vogliamo associare la descrizione
  • Abilitare la vista taxonomy_term che "sovrascrive" la visualizzazione delle pagine della tassonomia di default
  • In questa vista aggiungere un display (il tipo lo vediamo tra poco) con stile riga = campi; è importante sovrascrivere (override) almeno le sezioni "Filtri" e "Campi" per questo display, gli "Argomenti" dovrebbero invece restare concordi con la vista di base (Pagina con path taxonomy/term/%)
  • Tra i campi, aggiungere nodo:corpo
  • Aggiungere un filtro per nodo:tipo = descrizione
  • Caso 1 : display di tipo Allegato; allegare la vista descrizione "sopra" la vista pagina
  • Caso 2: display di tipo pagina da mostrare come tab (taxonomy/term/TID/descrizione) o come pagina separata; nel path della vista inserire "taxonomy/term/%/descrizione" e selezionare "normal menu tab" per il menu

A questo punto, una volta creati i nodi descrizione, la pagina di ciascun termine dovrebbe mostrare la descrizione del termine come allegato o come tab (o anche come blocco).
Rimane il problema dei nodi descrizione che non dovrebbero essere raggiungibili singolarmente.
A questo si può ovviare escludendo i nodi di tipo "descrizione" da tutte le viste e inserendo un redirect in template.php:

<?php
mytheme_preprocess_node
(&$variables) {
 
$node = $variables['node'];
  if (
arg(0) == 'node' && $node->type == 'descrizione') {
      
//inserisco il vid del vocabolario di mio interesse, in questo caso 2
      
$terms = taxonomy_node_get_terms_by_vocabulary($node,2);
       if (
$terms) {
         
//essendo il vocabolario a selezione singola qui ci sarà solo 1 iterazione;
          //esiste sicuramente un sistema migliore per estrarre il tid...
         
foreach ($terms as $term) {
           
$tid = $term->tid;
            }
      
drupal_goto("taxonomy/term/$tid");
       }
     }
}
?>

quest'ultimo accorgimento farà in modo che visitando un nodo "descrizione" l'utente sia rediretto alla pagina del termine.

Argomenti: