web-dev-qa-db-ja.com

ビューの結果が空の場合、公開されたフィルターブロックを非表示にする方法は?

ページのサイドバーに露出したフィルターブロックがあります。ビューの結果が空の場合、公開されたフィルターブロックを非表示にしたいのですが。それを行うのが最善でしたか?現在、私はいくつかのブロック要素を非表示にする結果なしの動作のテキストフィールドにいくつかのJqueryコードを持っています。しかし、私はこのソリューションが好きではありません。コードがクリーンでHTMLコードが完全に削除されている場合は、.

5
oll

@pierreの答えは適切ですが、$ view-> total_rowsが常に入力されるわけではありません。

したがって、代わりに次のようなことを行うことができます。これは何に関係なく機能します。

function MODULE_views_pre_render(&$view) {
  if ($view->name == 'VIEW_NAME' && $view->current_display == 'DISPLAY_NAME') {
    if (empty($view->result) && empty($view->getExposedInput())) {
      $view->exposed_widgets = NULL;
    }
  }
}
8
elstudio

上記の[function MODULE_form_views_exposed_form_alter(&$ form、&$ form_state)]の提案は、結果が表示されるかどうかに関係なく、公開されたフィルターを非表示にする場合に役立ちます。

したがって、あなたの要件に応じて、以下のコードを使用して結果が見つからない場合にフィルターを非表示にすることができます:

function hook_views_pre_render(&$view){
  if($view->name == VIEW_NAME){
    if(empty($view->result) && isset($view->exposed_widgets)){
        $view->exposed_widgets = FALSE;
      }
   }
}
1
Juyal Jee

カスタムモジュールで、_views_exposed_form_フォームに hook_form_FORM_ID_alter() を実装します。フォームがビューと表示からのものであるかどうかを確認することから始め、ビューに結果がない場合はその_#access_プロパティFALSEを設定します。

_function MODULE_form_views_exposed_form_alter (&$form, &$form_state) {
  $view = &$form_state['view'];
  if ($view->name == VIEW_NAME && $view->current_display == DISPLAY_NAME) {
    if (empty($view->total_rows)) {
      $form['#access'] = FALSE;
    }
  }
}
_
1
Pierre Buyle