Kombinierte Terms-Listings in Drupal
23. Februar 2010 | In: Drupal
In Drupal lassen sich Terme mit AND oder OR verknüpfen, um ein Listing zu erstellen was mit N Termen assoziert ist oder mit einem von N-Termen. Leider bietet Drupal aber keine Möglichkeit an, ein solches Listing zu erstellen. Das erledigt meine kleine Hilfsfunktion combine_terms();.
/** * Generates combined terms list * * @param $terms * array of terms * @param $conjunction * , or +, default , * @param $delimiter * term delimiter, default ' + ' * @return * themed html to display */ function combine_terms($terms, $conjunction = ',', $delimiter = ' + ') { list($path, ) = explode('/', taxonomy_term_path($terms[0])); $output = ''; // build "regular" term listing foreach($terms as $term) { $description = empty($term->description) ? $term->name : strip_tags($term->description); $term_link = l($term->name, $path. '/'. $term->tid, array('attributes' => array('rel' => 'tag', 'title' => $description))); $output .= '<li class="vocab-term">'. $term_link . $delimiter .'</li>'; } // build the combined term listing for($k = 0; $k<count ($terms); $k++) { if($k == count($terms)-1 && $k == 1) { continue; } $index = $k+1 > count($terms)-1 ? 0 : $k + 1; $output .= sprintf('<li class="vocab-term"><a href="/%s/%d%s%d" rel="tag" title="%s %s">%s %s</a>%s</li>', $path, $terms[$k]->tid, $conjunction, $terms[$index]->tid, $terms[$k]->name, $terms[$index]->name, $terms[$k]->name, $terms[$index]->name, $delimiter); } return $output; } </count> |
Ist eine Node also mit den Termen A, B und C assoziert, so liefert der Aufruf von combine_terms() das folgende Listing:
A, B, C, A+B, A+C, B+C bzw. A, B, C, A,B, A,C, B,C

Schreib einen Kommentar
Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.