web-dev-qa-db-ja.com

ビュー内のフィールドの条件付き削除

viewsを使用して、サイドバー領域に最新の5つのノード(ティーザービューモード)を表示しています。ノードには画像フィールドがありますが、リストの最初のノードにのみレンダリングする必要があります。

したがって、ティーザービューモードには画像が含まれているため、レンダリング時に最初のノードから離れたすべてのノードから画像を削除しようとしています。

私のテーマのtemplate.phpで次のことを試しました:

function foo_preprocess_views_view(&$vars) {
  if (isset($vars['view']) &&
      isset($vars['view']->style_plugin) &&
      isset($vars['view']->style_plugin->row_plugin->nodes)) {
    $first = true;
    foreach($vars['view']->style_plugin->row_plugin->nodes as $node) {
      if (!$first) {
        unset($node->field_image);
      }
      $first = false;
    }
  }
}

しかし、画像はまだレンダリングされています。これは、ノードの状態を表す間違ったデータ構造から画像を一時的に削除しようとしているという事実に関係していると思います。

次に、hook_preprocess_nodeを次のように使用してみました。

unset($vars['field_image']);

しかし、それでも効果はありません。画像はまだそこにありました。

これはどのように解決されますか?そして、どの層でそれが最もよく解決されますか?

.views-row-firstクラスを使用してCSSで単純に非表示にできることはわかっていますが、これは最適ではないと思います。

2
cherouvim

hook_views_pre_render() を試して、表示したくない場合は、フィールドの設定を解除してください。ビュー構成で、フィールドを「空の場合は非表示」に設定します。

1
tenken

Views Nodes Split を見てください。 月曜日のモジュール:ビューノードの分割 は、モジュールの使用方法に関する詳細情報を提供します。

モジュールの設定は簡単です。モジュールをオンにして、通常どおりにビューを作成するだけです。次に、ビューの[フォーマット]オプションをクリックし、新しく使用可能な「分割コンテンツ」行スタイルを選択します。文法は厄介ですが、結果は素晴らしいです。単純な構成画面から、最初のノードと後続のすべてのノードに個別のビルドモードと表示スタイルを指定できます。実際、カットオフが発生する場所を調整することもできます。たとえば、最初の3つのノードを完全に表示することができます。ビューに他の変更は必要ありません。このモジュールの新しい行スタイルが残りを処理します。

screenshot

1
tenken