Scroll
9.14.1. カスタムDrupal Viewsフィルターハンドラーの拡張
前回の記事では、Viewsモジュールをカスタムデータベースと統合する方法を「Did this help?」モジュールで説明しました:
https://www.drupal.org/project/did_this_help
この記事では、Choice(はい/いいえ)フィールドのViewsフィルターをオーバーライドします:

現在、これは "string" ハンドラーによって作成された通常のテキストフィールドで、検索キーを追加できます。しかし、オプションは Yes/No の2つだけなので、テキストフィールドの代わりにドロップボックスを使用する方がよいでしょう。/did_this_help/src/Plugin/views/filter/DidThisHelp.php ファイルを作成しましょう:
<?php
namespace Drupal\did_this_help\Plugin\views\filter;
use Drupal\views\Plugin\views\filter\InOperator;
/**
* Filters by given list of yes/no options.
*
* @ingroup views_filter_handlers
*
* @ViewsFilter("did_this_help")
*/
class DidThisHelp extends InOperator {
}
DidThisHelpクラスを親のInOperatorクラスから継承します。InOperatorは、Views UIの設定に応じて、セレクトドロップボックス、ラジオボタン、またはチェックボックスを使ったフィルターを提供します。
getValueOptions() メソッドで、利用可能なオプションのリストを追加します:
/**
* {@inheritdoc}
*/
public function getValueOptions() {
if (isset($this->valueOptions)) {
return $this->valueOptions;
}
$this->valueOptions = [
'yes' => $this->t('Yes'),
'no' => $this->t('No'),
];
return $this->valueOptions;
}
valueOptions プロパティは親クラスのInOperatorで定義されているため、オプションの配列だけを定義する必要があります。
その結果、次のようなフィルターができました:

公開フィルター(exposed filter)を有効にすると、このドロップボックスが表示されます:

Viewsや他のモジュールが提供するこのクラスのリストから、任意のフィルタークラスをオーバーライドできます:
| 名前 | 場所 | 説明 |
|---|---|---|
| Access | core/ |
node_accessレコードでフィルタリングします。 |
| BooleanOperator | core/ |
ブール値の一致を処理するシンプルなフィルター |
| BooleanOperatorString | core/ |
ブール値の一致を処理するシンプルなフィルター。 |
| Broken | core/ |
欠落または破損したハンドラーの代わりを務める特別なハンドラー。 |
| Bundle | core/ |
エンティティバンドルによるフィルタリングを可能にするフィルタークラス。 |
| Current | core/ |
現在のユーザー用のフィルターハンドラー。 |
| Date | core/ |
日付/時刻のViewsフィルター。 |
| Date | core/ |
タイムスタンプとして保存された日付を処理するフィルター。 |
| Equality | core/ |
等しい/等しくないフィルターを処理するシンプルなフィルター |
| FilterBooleanOperatorDefaultTest | core/ |
デフォルトの演算子で queryOpBoolean() をテストするフィルター。 |
| FilterPluginBase | core/ |
Viewsフィルターハンドラープラグインの基本クラス。 |
| GroupByNumeric | core/ |
より大きい/より小さいフィルターを処理するシンプルなフィルター |
| HistoryUserTimestamp | core/ |
新しいコンテンツ用のフィルター。 |
| InOperator | core/ |
チェックボックスで選択可能な複数のオプションの一致を処理するシンプルなフィルター |
| LanguageFilter | core/ |
言語によるフィルタリングを提供します。 |
| LatestRevision | core/ |
エンティティの最新リビジョンのみを表示するフィルター。 |
| ListField | core/ |
リストフィールドをオプションとして使用するフィルターハンドラー。 |
| ManyToOne | core/ |
多対1のリレーションシップのフィルタリングを処理する複雑なフィルター。たとえば、用語(ノード1つにつき複数の用語)やロール(ユーザー1人につき複数のロール)など。 |
| ModerationStateFilter | core/ |
エンティティのモデレーション状態のフィルターを提供します。 |
| Name | core/ |
ユーザー名用のフィルターハンドラー。 |
| NodeComment | core/ |
コメントノードのステータスに基づくフィルター。 |
| NumericFilter | core/ |
より大きい/より小さいフィルターを処理するシンプルなフィルター |
| Permissions | core/ |
ユーザーロール用のフィルターハンドラー。 |
| Roles | core/ |
ユーザーロール用のフィルターハンドラー。 |
| Search | core/ |
検索キーワード用のフィルターハンドラー。 |
| Standard | core/ |
基本フィルタープラグインの既定の実装。 |
| StatisticsLastUpdated | core/ |
最終コメント/ノード更新のうち新しい方のフィルターハンドラー。 |
| Status | core/ |
ファイルのステータスでフィルタリングします。 |
| Status | core/ |
公開ステータスでフィルタリングします。 |
| StringFilter | core/ |
等しい、含む、含まないなどの文字列フィルタリングコマンドを処理する基本的なテキストフィールドフィルター。 |
| TaxonomyIndexTid | core/ |
用語IDでフィルタリングします。 |
| TaxonomyIndexTidDepth | core/ |
深さを持つタクソノミー用語用のフィルターハンドラー。 |
| UidRevision | core/ |
特定のユーザーが作成したリビジョンを確認するフィルターハンドラー。 |
| UserUid | core/ |
ユーザーが投稿またはコメントしたノードを確認するためのユーザーIDを受け付けるフィルターハンドラー。 |
| UserUid | core/ |
ユーザーが投稿またはコメントしたノードを確認するUIDフィルター。 |
| ViewsFilter | core/ |
viewsフィルターハンドラー用のプラグインアノテーションオブジェクトを定義します。 |