Views Dependent Filters
Views の公開フィルターの表示を、別の公開フィルターの値によって制御できます。関連性のない依存フィルターは自動的に非表示になります。
views_dependent_filters
インストール
composer require 'drupal/views_dependent_filters:8.x-1.4'
概要
Views Dependent Filters は、Views の公開フィルターに条件付き表示機能を提供するモジュールです。複数の公開フィルターを持つ View がある場合、このモジュールを使用すると、他のフィルターで選択された値に基づいて特定のフィルターの表示/非表示を制御できます。
このモジュールは、View に特別な「Dependent filter」ハンドラーを追加することで機能します。このハンドラーはコントローラーフィルターと1つ以上の依存フィルターの間の橋渡し役として動作します。ユーザーがコントローラーフィルターで特定の値を選択すると、依存フィルターが表示されます。コントローラーフィルターの値が変更またはクリアされると、依存フィルターは自動的に非表示になり、よりクリーンで直感的なユーザーインターフェースを実現します。
このモジュールは Drupal の Form API #states システムを使用してクライアントサイドで表示の切り替えを処理するため、ページをリロードせずに即座にフィードバックを提供します。テキストフィールド、チェックボックス、ラジオボタン、セレクトリスト(単一選択・複数選択の両方)など、さまざまなフォーム要素タイプをサポートしています。
Features
- 他の公開フィルターで選択された値に基づいて公開フィルターの表示を制御
- 複数の条件モードをサポート:特定の値でトリガー、またはフィルターが空でない場合にトリガー
- Views の基本公開フォームおよび Better Exposed Filters モジュールと互換性あり
- テキストフィールド、チェックボックス、ラジオボタン、セレクト要素(単一・複数選択)など、さまざまなウィジェットタイプをサポート
- 否定条件オプションで表示ロジックを反転可能(条件が満たされたときに表示ではなく非表示に)
- 複数のインスタンスを追加して複雑なフィルター依存関係チェーンを作成可能
- Facets モジュールとの連携によるファセット検索の依存関係に対応
- Drupal Form API #states を使用したクライアントサイドでの即時表示切り替え
Use Cases
タイプ別フィルターを持つ商品カタログ
View で複数の商品タイプ(例:ケーキ、自転車、本)を表示します。公開フィルターでユーザーが商品タイプを選択できます。このモジュールを使用すると、関連する場合にのみ表示されるタイプ別フィルターを追加できます:「ケーキ」が選択された場合のみケーキのフレーバーフィルターが表示、「自転車」が選択された場合のみ自転車サイズフィルターが表示、「本」が選択された場合のみ本のジャンルフィルターが表示されます。
コンテンツタイプ別条件付きフィールド
View で複数のコンテンツタイプの Node を表示します。ユーザーがタイプフィルターで特定のコンテンツタイプを選択すると、そのコンテンツタイプにのみ存在するフィールドの追加フィルターが表示され、無関係なフィルターオプションによる混乱を避けられます。
階層的な場所フィルタリング
View に国と都市のフィルターがあります。都市フィルターを国フィルターに依存させることで、国が選択された後にのみ都市が表示されるようになり、最初に表示されるオプション数を減らしてユーザー体験を向上させます。
ファセット検索の強化
Facets モジュールを Views と一緒に使用する場合、このモジュールでファセットフィルター間の依存関係を作成できます。プライマリファセットに選択がある場合にのみセカンダリファセットを表示することで、ガイド付きのフィルタリング体験を作成します。
フォームの簡素化
多数の公開フィルターを持つ複雑な View を、基本フィルターで特定の値を選択してユーザーが必要であることを示すまで高度なフィルターを非表示にすることで簡素化し、初期の認知負荷を軽減できます。
Tips
- フィルターの順序で Dependent filter ハンドラーを慎重に配置してください。自身より前のフィルターのみをコントローラーとして、自身より後のフィルターのみを依存フィルターとして使用できます
- 複数の Dependent filter ハンドラーを追加して、複数のフィルターグループ間の複雑な依存関係を作成できます
- 必須の公開フィルターは常に表示される必要があるため、依存フィルターとして設定できません
- 依存フィルターを表示する複数の値(例:「ケーキ」と「自転車」の両方)を選択した場合、両方の依存フィルターが表示されますが、Views のクエリロジックにより、両方の条件に一致する結果が存在する必要があります
- 否定オプションは動作を反転させます。条件が満たされたときにフィルターを表示ではなく非表示にしたい場合に使用します
- Facets との連携では、リストから選択するのではなく、生のファセット値(URL に表示される形式)を手動で入力する必要があります
Technical Details
Hooks 1
hook_views_data_alter
グローバルな「views」テーブルデータに追加することで、「views_dependent_filter」フィルタープラグインを Views に登録
Troubleshooting 4
JavaScript が有効になっていること、ブラウザコンソールに JS エラーがないことを確認してください。フィルターの順序が正しいことを確認:コントローラーフィルターは Dependent filter ハンドラーの前に、依存フィルターはその後に配置する必要があります。
このモジュールはテキストフィールド、チェックボックス、ラジオボタン、セレクトウィジェットをサポートしています。サポートされていないウィジェットタイプの警告が表示された場合は、Views フィルター設定または Better Exposed Filters 設定で公開フィルターのウィジェットをサポートされているタイプに変更することを検討してください。
Form API #states が複数選択要素に対して OR ロジックではなく XOR ロジックを使用するという既知の Drupal core の問題(#1149078)があります。これにより、複数選択要素で制御される依存フィルターで予期しない動作が発生する可能性があります。
これは Views の想定された動作です。複数の条件(例:ケーキのフレーバーと自転車サイズ)でフィルタリングする場合、結果はすべての条件に一致する必要があります。コンテンツが両方の属性を持っていない限り、結果は返されません。