logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

9.14.1. カスタムDrupal Viewsフィルターハンドラーの拡張

03/11/2020, by Ivan

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