LoginSignup
6
7
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Drupal】Viewsの最強機能 Contextual Filter 解説するよ

Last updated at Posted at 2024-06-15

Viewsの最強の機能の一角、「Contextual Filter」使いこなせてますか?

私はWeb業界に入って、Drupalが始めてだったので理解するのに一番時間がかかった機能でした。(SQLとか知る由もない)

このシリーズでは三記事に渡って、Contextual Filter の基礎から応用までを段階的に解説していきます。

今回は Introduction編 です。

SQLの基本的な知識があると更に理解が深まります。
SQLシリーズも執筆してます。

こちらもぜひ。
【SQLマスターへの道】NULL値を制御「COALESCE」
【SQLマスターへの道】条件付きソート「CASE・WHEN」
【SQLマスターへの道】入社年度で学ぶ 「BETWEEN」

その前にContextってなに?

「ある特定の条件・状況」です。つまりシチュエーションですね。

例えば...。

  • URLのPathに応じて投げるSQLクエリを変えたい
  • ログインユーザーのIDを利用したSQLクエリを構築したい
  • 言語に応じて、見せるコンテンツ/見せないコンテンツを制御したい

とか。シチュエーションに応じたフィルタリングをしたいために作られた機能が、Contextual Filter ですね。

Contextual Filter って?

「シチュエーションに応じたフィルタリング機能」です。

DrupalのViewsが提供するデータの絞り込み機能ですね。SQLでいうとこのWHERE句です。

Argumentを動的に設定したいSQLクエリを作るにはもってこいです。
※ 固定値を設定して、あえて静的なフィルターにすることもできます。

なにができる?

全部は紹介できませんが、私がに多用/乱用している使い方を2つ紹介します。

  • フィールド値による絞り込み(BaseTableで設定しているEntityが持つフィールドのみ対象です)
  • Views自体の表示制御(これめちゃくちゃ強い)

推しポイントは?

ちゃんと使いこなした際のメリットはめちゃくちゃ大きいです。

  • ModelロジックのComponent化。(MVC)
  • ViewロジックのCompoent化。(MVC)
    Frontend Engineerにも一箇所のView Displayを説明すればいいですよね。
  • クエリキャッシュを活かせるのでパフォーマンス面に優しい
  • Configファイルが圧迫しない(複数のエンジニアで開発している際のコンフリクトリスク減)
  • Etc…

Contextの渡し方/受け取り方の組み込みさえできれば、かなりメンテナンスしやすい作品ができます。

え待って…。Viewsって標準のフィルターもあるよね?

はい。あります。

スクリーンショット 2024-06-16 0.17.33.png

でも決定的な違いがあります。

静的 or 動的 です。

※ 標準のフィルターを Static Filter って僕は呼んでいます。この記事でもそう呼びます。

Static Filter はいつ使うの?

Drupalに1年半捧げて、ありえないほどViews作ってきて答えが出たんですが、使うときは決まって1つ。

「Exposed Filter を利用する時」のみです。

つまり、GUIのフィルターが必要か否かです。

スクリーンショット 2024-06-16 0.30.05.png

ExposedFilterはまじで便利。
GUI設定のみで組み込んでくれてるのはあついです。(独自のForm実装がいらないので。)

Contexual Filter はいつ使うの?

ほぼ全てですね。

Argumentを動的に設定したいSQLクエリを作るにはもってこいです。
※ 固定値を設定して、あえて静的なフィルターにすることもできます。

詳しくは次回のHow To編でご紹介します。

単一のディスプレイのみで、Model/View ロジックの Component化 ができます。(MVC)
もちろん、Context の渡し方をちゃんと組み込む必要はあります。

まさかですが、カテゴリの数だけ記事一覧のViewsDisplayを作成してないですよね?

まとめ

いかがでしょうか?

WHERE句を設定したいなら、「Contextual Filter」しかありえないです。
WHERE句を変更するようなFormを実装する要件が出て始めて、「Static Filter」の選択肢が出てくるかと思います。
(もちろんそれすらも Contextual Filter でやってしまうことも多いですが...笑)

Argumentを動的変更したり、あえて静的(固定)にするということもできます。

Component化できる、クエリキャッシュを活かせる、メリットはかなり大きいと思います。

次回は How To 編 !!
細かい設定方法とその手順を詳しく解説します。

お楽しみに。

Document

公式: Contextual Filter

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7