web-dev-qa-db-ja.com

公開されたフォームフィルターのウィジェットをオーバーライドする方法は?

ユーザーに公開された単一のフィルター基準(それをと呼びましょう)と呼ぶビューがあります。ユーザーは、このビュー(標準ビューのもの)で複数のカテゴリを選択することもできます。

category選択フィルターは、要素の大きな<select>でユーザーにレンダリングされます。 美的理由から、これは望ましくありません

私がやろうとしていることは、<select>要素をレンダリングするウィジェットの表示をオーバーライドすることです。 /sites/all/modules/view/themes/views-exposed-form.php.tplをテーマのフォルダーにコピーしましたが、ウィジェット自体(<select>フォームコントロールを含み、他の何かに変更したい)は$widget->widget;によって単純にレンダリングされます

ウィジェットがビューで複数のカテゴリー選択フィルターをレンダリングする方法を変更するにはどうすればよいですか?

編集、詳細と明快さのために: この質問 ウィジェットのスタイリングを扱いますが、それは私がやりたいことではありません。ウィジェットをレンダリングするマークアップを変更したい。

別の編集(自分の質問に答えた後):判明widgetは正確ではないDrupal公開されたフォームフィルターにここで使用する用語。

4
CamelBlues

さて、ネットを掘り下げて1日過ごした後、これを行うには2つの方法があるようです。

まず、明確にするために、ビューから公開されたフィルターはウィジェットではありません、少なくともDrupalの意味で) Wordの伝統的なDrupal Wordの意味では、ウィジェットはeditフォームで使用されるものですaddform。hook_field_widget_alter()のようなフックであり、それらの兄弟はこれらのウィジェットを操作します。

views-exposed-form.php.tplには$widget変数として使用すると、ウィジェットになりません!!!

混乱が解消された今、露出したフィルターを変更するには2つの方法があります。

  1. カスタムモジュールを追加し、hook_form_alter公開されたフィルターフォームに関する変更。カスタムモジュール(bypassと呼ばれます)を作成し、いくつかの簡単なデバッグ情報を表示するフックを作成するところまで行きました。

    function bypass_form_alter(&$form, &$form_state, $form_id){
        dsm($form_id);
        dsm($form);
    }
    

Better Exposed Filters モジュールを発見したとき。

  1. Better Exposed Filtersモジュールを使用して、フィルターをチェックボックス、ラジオボタンなどとして表示し、スタイルを設定します。

オプション2は私が今やっていることです。これが誰かを助けることを願っています:)

7
CamelBlues