Drupal 6: Listendarstellung (item-list) mit odd / even CSS-Klassen erweitern (Zebra)

Autor: Sven am Thu, 11.02.2010 - 11:39

Den Listelementen wird standardmäßig die Klasse "first" bzw. "last" mitgegeben, wird nun aber eine zeilenbezogene Hintergrundanpassung gewünscht wie in der Tabelle, fehlt hier die entsprechende Funktionalität. Der nachfolgenden Code muss einfach im Theme Verzeichnis in die "template.php" kopiert werden und der Begriff "THEMENAME" entsprechend ersetzt werden.
Nach Löschen des Caches werden alle Listenelemente mit einem "odd" bzw. "even" versehen und der Zugriff ist über die CSS-Klassen möglich.

Der entsprechende Thread dazu ist auch hier zu finden: http://drupal.org/node/165456.

function THEMENAME_item_list($items = array(), $title = NULL, $type = 'ul', $attributes = NULL) {
  static $count = 0; // added
  $output = '<div class="item-list">';
  if (isset($title)) {
    $output .= '<h3>' . $title . '</h3>';
  }

  if (!empty($items)) {
    $output .= "<$type" . drupal_attributes($attributes) . '>';
    $num_items = count($items);
    foreach ($items as $i => $item) {
      $zebra = ($count % 2) ? 'odd' : 'even'; // added
      $count++; // added
      $attributes = array();
      $children = array();
      if (is_array($item)) {
        foreach ($item as $key => $value) {
          if ($key == 'data') {
            $data = $value;
          }
          elseif ($key == 'children') {
            $children = $value;
          }
          else {
            $attributes[$key] = $value;
          }
        }
      }
      else {
        $data = $item;
      }
      if (count($children) > 0) {
        $data .= theme_item_list($children, NULL, $type, $attributes); // Render nested list
      }
      if ($i == 0) {
        $attributes['class'] = empty($attributes['class']) ? 'first' : ($attributes['class'] . ' first');
      }
      if ($i == $num_items - 1) {
        $attributes['class'] = empty($attributes['class']) ? 'last' : ($attributes['class'] . ' last');
      }
      $attributes['class'] .= ' ' . $zebra;
      $attributes['class'] = trim($attributes['class']);
      $output .= '<li' . drupal_attributes($attributes) . '>' . $data . "</li>\n";
    }
    $output .= "</$type>";
  }
  $output .= '</div>';
  return $output;
}