web-dev-qa-db-ja.com

行のフィールドの値に基づいて行にクラスを追加するにはどうすればよいですか?

イベントのリストを表示するページ表示付きのビューがあります。過去のイベントの行にクラスを追加したいのですが。

私が抱えている問題は、views-view-list.tpl.phpが行内のフィールドの値にアクセスできないことです。

また、views-view-fields.tpl.phpを使用して1つの行の日付フィールドを確認し、その行の各フィールドを、日付フィールドが過去かどうかに基づいてdivまたはspanでラップすることができます。

行内のフィールドの値を使用して行全体をクラスで何かにラップする方法がわかりません。

4
user5035

次は、クラス 'hello'をliタグに追加します。マシン名が「dates」、表示名が「page」のビューを使用しました。時間フィールドは、ノードの作成時間です。 Develをインストールしてdpm($ vars)ステートメントのコメントを外すだけで、必要なものを取得できます。条件付きロジックもあなたに任せました。

これをテーマのtemplate.phpファイルに入れます:

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
      }
    }
  }
}

代替方法は次のとおりです。

これをテーマのtemplate.phpファイルに入れます:

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';
    }
  }
}

そして、この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