web-dev-qa-db-fra.com

Comment ajouter une classe à une ligne en fonction de la valeur d'un champ dans cette ligne?

J'ai une vue avec un affichage de page montrant une liste d'événements. Je voudrais ajouter une classe aux lignes de ces événements du passé.

Le problème que j'ai, c'est que views-view-list.tpl.php n'a pas accès aux valeurs des champs dans les lignes.

Et je peux utiliser views-view-fields.tpl.php pour vérifier le champ de date d'une ligne et envelopper chaque champ de cette ligne avec un div ou une plage selon que le champ de date se trouve ou non dans le passé.

Je n'arrive pas à comprendre comment utiliser la valeur d'un champ dans une ligne pour envelopper la ligne entière dans quelque chose avec une classe.

4
user5035

Ce qui suit ajoutera la classe 'hello' à la balise li. J'ai utilisé une vue avec le nom de la machine "dates" et un nom d'affichage "page". Le champ d'heure est l'heure de création du nœud. Vous pouvez simplement installer Devel et décommenter l'instruction dpm ($ vars) pour obtenir ce dont vous avez besoin. Je vous ai également laissé la logique conditionnelle.

Mettez ceci dans le fichier template.php de votre thème:

function MYTHEME_preprocess_views_view_list(&$vars) {
  if ($vars['view']->name == 'dates' && $vars['view']->current_display == "page") {
    // dpm($vars); //uncomment to see variables
    foreach($vars['view']->result as $key => $value){
      $timestamp = $value->node_created;
      if ($timestamp) { // add whatever conditional logic you need here
        $vars['classes_array'][$key] .= ' hello'; // note the space in front of class
      }
    }
  }
}

Une méthode alternative est la suivante:

Mettez ceci dans le fichier template.php de votre thème:

function MYTHEME_preprocess_views_view_fields(&$vars) {
  if ($vars['view']->name == 'dates' && $vars['view']->current_display == "page") {
    $timestamp = $vars['row']->node_created;
    if ($timestamp < strtotime('now')) {
      $vars['classes_array'][] = 'bye';
    }
  }
}

et utilisez ce fichier views-view-fields - VIEWNAME.tpl.php:

<div class="<?php print $classes;?>">
<?php foreach ($fields as $id => $field): ?>
  <?php if (!empty($field->separator)): ?>
    <?php print $field->separator; ?>
  <?php endif; ?>

  <?php print $field->wrapper_prefix; ?>
  <?php print $field->label_html; ?>
  <?php print $field->content; ?>
  <?php print $field->wrapper_suffix; ?>
<?php endforeach; ?>
</div>
6
J. Reynolds