Mostrare separatemente termini di un solo vocabolario

Dopo una richiesta simile sul forum di DrupalItalia.org pubblico qui un piccolo snippet Drupal per mostrare solo i terminini relativi ad un determinato Vocabolario senza l'utilizzo di alcun modulo aggiuntivo.

Online esistono molte versioni e soluzioni differenti, personalmente ho preso spunto da questo articolo aggiungendo qualche piccola ed utile feature, ad ogni modo aggiungerò a fine articolo alcuni altri link di soluzioni simili.

Reperiamo e processiamo i termini

Apriamo il file template.php del nostro tema ed inseriamo il codice sottstante, preferibilmente alla fine del file.

function getTerm($vid, $link, $node, $tagsymbol, $labelname) {
    foreach((array)$node->taxonomy as $term){
        if ($term->vid == $vid){
            if ($link){
                $link_set[] = l((($tagsymbol)?$tagsymbol:'') . $term->name, taxonomy_term_path($term));
            } else {
                $link_set[] = (($tagsymbol)?$tagsymbol:'') . $term->name;
            }
        }
    }

    if (!empty($link_set)){
        $link_set = (($labelname!=false)?$labelname:'') . implode('', $link_set);
    }
    return $link_set;
}

Mostriamo i termini

A questo siamo già pronti per mostrare i termini allegati ad un nodo relativi a uno o più vocabolari separatemente, richiamando semplicemente la funzione precedente.

Apriamo il file node.tpl.php o node-NODETYPE.tpl.php, commentiamo o eliminiamo del tutto la riga che contiene la variabile $terms ad esempio:

<?php
    print $terms;
?>

Fatto questo, possiamo richiamare la nostra funzione in modo simile al codice seguente:

<?php
    print getTerm(1, true, $node, '#', 'Tags: ');
?>

Quali variabili abbiamo passato alla funzione?

getTerm($vid, $link, $node, $tagsymbol, $labelname) dove:

  • $vid: un numero intero maggiore o uguale ad 1, è l'ID del vocabolario dal quale estrarre i termini collegati al nodo;
  • $link: False o True, possiamo decidere se stampare i termini come link o no;
  • $node: avendo inserito lo snippet all'interno del file node.tpl.php abbiamo a disposizione l'oggetto $node, inseriamolo, è in questo oggett che abbiamo i riferimenti ad i termini allegati al nodo;
  • $tagsymbol: un qualsiasi simbolo alfanumerico, di una o più lettere, anche uno spazio vuoto... quello che verrà inserito al posto di questa variabile verrà anteposto prima di ogni termine stampato, come accade qui sulla sinistra in questo blog;
  • $labelname: una qualsiasi parola alfanumerica, possiamo inserire qualcosa che verrà anteposto una sola volta prima della lista dei termini mostrati, il risultato è sempre visibile qui sulla sinistra in questo blog;

E... se volessimo visualizzare i termini di 2 vocabolari differenti?

Possiamo fare anche questo, richiamando un'ulteriore volta la funzione getTerm() ovviamente cambiando le variabili passate come ad esempio l'ID del secondo vocabolario.

L'effetto è anch'esso visibile in questo blog sulla sinistra, in cui ho richiamato per 2 volte la funzione, rispettivamente la prima per i TAGS e la seconda per gli ARGOMENTI.

Conclusione

Spero di essere stato utile, aggiungo di seguito link e snippet completo inserito su GitHub, non si sa mai qualcuno volesse arricchirlo e/o condividerlo.

Short URL: Copy and share: http://to.ly/9glD
Pubblicato il 04/01/2011

Autore: Domenico.Monaco[@]kiuz.it
Lavoro professionalmente come Web developer e Web designer, oltre che essere appassionato di informatica, free software e della cultura rock ed underground.