Taxonomie Terme nach Vokabular aufteilen

Im Theme in der Datei node.tpl.php wird man irgendwo folgendem Snippet begegnen:

<?php
print $term;
?>

Dadurch werden alle Terme, welche mit dem Node verbunden sind aufgelistet (unabhängig vom Vokabular)! Wenn man also z.B.  verschiedene Vokabulare hat, so werden die ganzen Terms einfach in einer Liste aufgelistet und man kann nicht wissen, zu welchem Vokabular der jeweilige Term gehört. In vielen Fällen mag das ok sein, aber in vielen Fällen auch nicht.

Der folgende Snippet muss in die template.php rein:

<?php
function myTheme_preprocess(&$vars, $hook) {
   
$vars['term'] = phptemplate_print_terms($vars['node']);
}
// */

// split out taxonomy terms by vocabulary
function phptemplate_print_terms($node) {
   
$nid = $node->nid;
    
$vocabularies = taxonomy_get_vocabularies();
    
$output = '<ul>';
     foreach(
$vocabularies as $vocabulary) {
       if (
$vocabularies) {
        
$terms = taxonomy_node_get_terms_by_vocabulary($node, $vocabulary->vid);
         if (
$terms) {
          
$links = array();
          
$output .= '<li>' . $vocabulary->name . ': ';
           foreach (
$terms as $term) {
            
$links[] = l($term->name, taxonomy_term_path($term), array('rel' => 'tag', 'title' => strip_tags($term->description)));
           }
          
$output .= implode(', ', $links);
          
$output .= '</li>';
         }
       }
     }
    
$output .= '</ul>';
     return
$output;
}
?>

Und das wäre es dann auch schon... ;) Einfach myTheme durch das jeweilige Theme ersetzen. Zudem muss der Cache nochmals neu geleert werden (unter Performance ganz zuunterst). Wenn man sich jetzt den Node nochmals anschauen, wird man erfreut sein ;)

Congrats , good article.

Congrats , good article.