回答:
ビューのフックを学ぶには少し時間がかかります。ビューテンプレートファイルについて知っていますか?そうであるなら、それを行うための迅速で汚い方法は、最上位レベルのビューテンプレートファイルに表示出力がある行数を確認することです。Develモジュールがインストールされている場合はdpm($variables)
、views-view.tpl.phpを使用できます(ビューに固有の表示出力を使用することをお勧めします)。
私はどこに$variables
いるかは思い出せませんが、どこかに行カウントがあります。ロジックがテンプレートファイルに追加され、$rows
基準を満たさない場合に印刷されないようにすることができます。
googletorpが与えたヒントに基づいて、私の簡単な解決策はこれを私のtemplate.phpに入れることです:
function MY_THEME_NAME_preprocess_views_view(&$vars) {
if ($vars['display_id'] == 'MY_DISPLAY_ID' && count($vars['view']->result) < 2) {
$vars['view']->result = NULL;
}
}
この場合、ビューの結果が2つ未満の場合、ビューを非表示にしています。
どうもありがとう!
テンプレートの前処理関数では、ビューの結果(行)の数を簡単に検出し、その場合は出力に空の文字列を設定できます。
これを機能させるには、テンプレートで少し作業を行う必要がある場合があります。ビューは常に、ビューが空の場合はおそらく望ましくない折り返しHTMLを追加するためです。
おそらく、template_preprocess_views_view()プリプロセス関数で行うのが最も簡単でしょう。テンプレートに関するヒントを得るために、ビューインターフェースを調べることができます。
views-view.tpl.php
ファイルのインスタンスを<?php if ($rows): ?> ... <?php endif; ?>. My understanding currently is there is no way to eliminate the extraneous wrapper HTML otherwise. If the
$ rows`変数で囲んだだけで、そのファイルではすでに変数を使用できますが、なぜ余分な作業を行うのtemplate.php
ですか?
この理由が主に表示指向である場合(たとえば、グリッドを構築していて、偶数/奇数のアイテムを強制したい場合)、テーマレイヤーにカスタムロジックを追加するのが最も論理的だと思います。他の答えはこれをカバーしていると思います。ただし、見つかった問題は、変更が必要になる可能性がある一部のビュー変数(たとえば、$view->result = NULL
:)は、プリプロセス関数の一部として安全に変更できないことです。ビューの内部キャッシュは、「レンダリングされた出力」と「クエリ結果」のキャッシュ設定の一部の組み合わせが既存のソリューションと互換性がないような方法でいくつかの変数を生成する可能性があります。
1つの代替方法は、実行されたクエリ自体の結果を変更することです。これにより、はるかに低いレベルでの制御が可能になります。マークアップが構築される前でも「空の」結果セットをシミュレートするため、ラッパーマークアップの非表示に関する問題のいくつかを回避することもできます。
/**
* Implements hook_views_post_execute().
*/
function MYMODULE_views_post_execute(&$view) {
$view_name = 'myviewname';
$view_display = 'mydisplay';
// Don't show the view if there is only one item.
if ($view->name == $view_name && $view->current_display == $view_display && count($view->result) < 2) {
$view->result = array();
}
}
もちろん、テーマや変更フックとは関係がないので、これをテーマに実装することはできませんが、この質問に興味がある人には注目に値すると思います。
場合によっては、この種の条件をビューに配置した方がいい場合があります。これにより、ビルダーは、他のモジュールやテーマフックではなく、編集ビューコンテキスト内で何が行われているのかを理解できます。
このロジックをビュー編集ページに含めたい場合は、次のようにできます。
<?php $view = views_get_current_view(); if ( count($view->result) < 5 ) { $view->result = null; } ?>
テーマテンプレートを使用してこれを行うこともできます。
views-view.php
あなたのtheme / templatesディレクトリにコピーしてくださいviews-view--view-name--display-name.tpl.php
if (count($rows) < $n):
コードにして、必要に応じて結果の数に基づいて操作する