本文へ移動
STUDIO UMI
DRUPAL BLOGDrupalブログ

リレーションシップとコンテクスチュアルフィルターを知ろう

Nishimae Mayu

こんにちは!ディレクターの西前です。
今年の8月に入社し、初めて Drupal に触れた初心者です。
初のブログは、Drupal について学ぶ中でつまずいた、Views のリレーションシップとコンテクスチュアルフィルターについてまとめてみたいと思います。
そもそも Views の使い方が分からない!という方は下記もあわせてお読みください。
Viewsをサクッと作る3つのコツ外部リンク

こちらの記事は、Drupal Advent Calendar 2023外部リンク へ寄稿します。
Drupal に関する様々な記事を読むことが出来ますので、ぜひご覧ください!

「リレーションシップ」・「コンテクスチュアルフィルター」とは何か

まずは大枠を捉えていきましょう。

「リレーションシップ」はテーブルを結合するもの

SQL で言う「JOIN」に相当するものです。
例えば、「コンテンツ」を使用して作成したビューでは、コンテンツで保持している要素しか表示が出来ません。
そこで、リレーションシップを使用することで、他のエンティティ(例:ユーザーエンティティ)の情報が参照出来るようになります。

「コンテクスチュアルフィルター」は情報を絞り込むもの

SQL で言う「WHERE」に相当するものです。
「コンテキスト(context)」は「文脈、前後関係、事情、背景、状況」の意味を持つ単語であることから、URL のパラメーターや URL から取得できるコンテンツの ID などの文脈から得られる情報を使用して、情報を絞り込めることが分かります。

どう使うのか

大枠が分かったところで、実際に使用してみましょう。

「リレーションシップ」を使用してユーザーエンティティの情報を表示する

記事を投稿したユーザーのアイコンを、Views で作成した記事の一覧に掲載してみます。

まず、記事の一覧を作成します。
スクリーンショット 2023-11-21 15.04.27.png

「フィールド」を追加します。
投稿者情報からアイコンを表示したいのですが、この時点では選択肢に出てきません。
スクリーンショット 2023-11-21 15.04.27.png

そこでリレーションシップの登場です!
「記事」コンテンツの持っている情報にユーザーアイコンはありません。
この情報を持っているのは「ユーザーエンティティ」であり、リレーションシップを組むことで情報を参照出来るようになります。

リレーションシップを組んでみます。

「高度」タブを開き、リレーションシップを追加します。
スクリーンショット 2023-11-21 15.14.08.png

「ユーザー」を選択します。
スクリーンショット 2023-11-21 15.28.22.png (121.6 kB)

再度「フィールド」の追加を選択すると、カテゴリにユーザーが追加されています!
スクリーンショット 2023-11-21 15.30.31.png (35.8 kB)

「ユーザー」の「描画されたエンティティ」を選択すると…
ユーザーアイコンが表示されました!
スクリーンショット 2023-11-21 15.39.07.png (33.7 kB)

「コンテクスチュアルフィルター」使用して関連する記事を表示する

現在閲覧している記事に関連する他の記事を表示してみます。
今回は同じタクソノミータームを持つ記事を、関連記事とします。

あらかじめ、記事にはタグ(タクソノミーターム)を設定しています。
スクリーンショット 2023-11-21 16.10.10.png (5.8 kB)

まずは、記事一覧の作成です。
この時点では、全ての記事が一覧として出ている状態です。
スクリーンショット 2023-11-21 16.13.39.png (30.7 kB)

「高度」タブを開き、コンテクスチュアルフィルターを追加します。
スクリーンショット 2023-11-22 16.01.31.png (32.7 kB)

「タクソノミーターム ID を含む」を選択します。
スクリーンショット 2023-11-22 15.53.36.png (128.0 kB)

詳細な設定は、下記の通りです。
ノードに紐づくタクソノミータームの ID で絞り込みます。
スクリーンショット 2023-11-22 16.10.44.png (203.0 kB) スクリーンショット 2023-11-22 16.16.54.png (140.0 kB)

このままでは、現在閲覧している記事も一覧に出てきてしまうため、もう 1 つコンテクスチュアルフィルターを追加します。
上記のコンテクスチュアルフィルターで抽出されたデータを更に絞り込むイメージです。
スクリーンショット 2023-11-22 16.18.51.png (83.7 kB) スクリーンショット 2023-11-22 16.19.31.png (78.3 kB)

実際に記事にブロックを配置して確認してみると…
滋賀店に関する記事だけが表示されました!
スクリーンショット 2023-11-22 16.21.06.png (104.1 kB)

「リレーションシップ」と「コンテクスチュアルフィルター」でコンテンツに関連する記事を表示する

最後は、2 つを合わせて使用する方法をご紹介します。
基本的に、リレーションシップとコンテクスチュアルフィルターは合わせて使われることが多いです。

コンテンツの中に、関連する記事を表示させてみます。

あらかじめ、記事には関連するコンテンツを設定しておきます。
スクリーンショット 2023-11-22 16.36.44.png (80.2 kB)

まずは Views で記事の一覧を作成します。
スクリーンショット 2023-11-22 16.39.05.png (78.7 kB)

リレーションシップを組みます。
これにより、記事の「関連する店舗」に設定されたコンテンツが参照出来るようになります。
スクリーンショット 2023-11-22 16.41.36.png (137.0 kB)

コンテクスチュアルフィルターを追加し、「ID」を選択します。
スクリーンショット 2023-11-22 16.39.46.png (141.5 kB)

「リレーションシップ」に、先ほど参照したフィールドを設定します。(画像 ①)
また、閲覧しているコンテンツのノード ID (URL の/node/num の部分)で表示する記事を変えるために、タイプは「URL から取得したコンテンツ ID」に設定します。(画像 ②)
スクリーンショット 2023-11-22 16.51.37.png (179.8 kB)

コンテンツに、作成したブロックを配置してみると…
東京店舗に関連する記事だけが表示されました!
スクリーンショット 2023-11-22 16.57.39.png (88.5 kB)

まとめ

一見少し取っ付きにくいリレーションシップとコンテクスチュアルフィルターですが、使用することで Views の可能性がぐっと広がることが分かりました。
これからも初心者目線の記事を書いていけたらと思うので、よろしくお願いいたします!

スタジオ・ウミは15年以上の実績を誇るDrupal専門の開発会社です。豊富な知見とノウハウでDrupalサイトの開発や技術サポートなどDrupal関連サービスをワンストップでご提供します。

RECRUIT

新たなステージを共に歩んでいける
コアメンバーを募集しています

採用情報

CONTACT

お仕事のご相談やお見積依頼など、
お気軽にお問い合わせください。

お問い合わせ