Ajouter des classes « first » et « last » aux listes LI

Date du document en anglais : 23 Août 2009 - 15h34 - http://drupal.org/node/213711  



Comme dans le billet précédent, mais appliqué aux listes LI.

Le traitement des listes s'effectue dans les fonctions theme_item_list($items = array(), $title = NULL, $type = 'ul', $attributes = NULL)> qui peuvent être surchargées dans le fichier template.php. Il n'y a que quelques petits changements à effectuer pour que cela fonctionne (ajouter $item_key au foreach et vérifier le décompte pour déterminer si la class s'applique).

Copiez le code ci-dessous dans votre fichier template.php et ce sera tout :

<?php
function phptemplate_item_list($items = array(), $title NULL$type 'ul'$attributes NULL) {
  
$output '<div class="item-list">';
  if (isset(
$title)) {
    
$output .= '<h3>'$title .'</h3>';
  }

  if (!empty(
$items)) {
    
$output .= "<$type" drupal_attributes($attributes) . '>';
    foreach (
$items as $item_key=>$item) {
      
$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($childrenNULL$type$attributes); // Render nested list
      
}
      if(
$item_key == 0) {
        
$attributes['class'] = (isset($attributes['class'])? $attributes['class'] .= ' first' 'first');
      } 
      elseif(
$item_key == count($items)-1){
        
$attributes['class'] = (isset($attributes['class'])? $attributes['class'] .= ' last' 'last');
      }     
      
$output .= '<li' drupal_attributes($attributes) . '>'$data .'</li>';
    }
/* end foreach */   
    
$output .= "</$type>"
  }
  
$output .= '</div>';
  return 
$output;
}
?>  

Bonus : zebra

Pour ajouter une classe zebra qui alternera les items de la liste (pas les balises php); ajoutez ce qui suit avant le $output .= '<li' . drupal_attributes($attributes) . '>'. $data .'</li>'; :

  <?php
if ($item_key 2) { 
    
$attributes['class'] = (
        isset(
$attributes['class']) 
            ? 
$attributes['class'] .= ' zebra' 
            
$attributes['class'] = 'zebra'
        
); 

?>  

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
9 + 4 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.