Bookmarken Twitter Feed

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

Bewertung: najagut
Loading ... Loading ...

Ähnliche Beiträge

Schreib einen Kommentar

Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.
Sign in with Facebook

By Teledir Internetanbieter