こんにちは!ディレクターの西前です。
今年の8月に入社し、初めて Drupal に触れた初心者です。
初のブログは、Drupal について学ぶ中でつまずいた、Views のリレーションシップとコンテクスチュアルフィルターについてまとめてみたいと思います。
そもそも Views の使い方が分からない!という方は下記もあわせてお読みください。
Viewsをサクッと作る3つのコツ
こちらの記事は、Drupal Advent Calendar 2023 へ寄稿します。
Drupal に関する様々な記事を読むことが出来ますので、ぜひご覧ください!
「リレーションシップ」・「コンテクスチュアルフィルター」とは何か
まずは大枠を捉えていきましょう。
「リレーションシップ」はテーブルを結合するもの
SQL で言う「JOIN」に相当するものです。
例えば、「コンテンツ」を使用して作成したビューでは、コンテンツで保持している要素しか表示が出来ません。
そこで、リレーションシップを使用することで、他のエンティティ(例:ユーザーエンティティ)の情報が参照出来るようになります。
「コンテクスチュアルフィルター」は情報を絞り込むもの
SQL で言う「WHERE」に相当するものです。
「コンテキスト(context)」は「文脈、前後関係、事情、背景、状況」の意味を持つ単語であることから、URL のパラメーターや URL から取得できるコンテンツの ID などの文脈から得られる情報を使用して、情報を絞り込めることが分かります。
どう使うのか
大枠が分かったところで、実際に使用してみましょう。
「リレーションシップ」を使用してユーザーエンティティの情報を表示する
記事を投稿したユーザーのアイコンを、Views で作成した記事の一覧に掲載してみます。
まず、記事の一覧を作成します。
「フィールド」を追加します。
投稿者情報からアイコンを表示したいのですが、この時点では選択肢に出てきません。
そこでリレーションシップの登場です!
「記事」コンテンツの持っている情報にユーザーアイコンはありません。
この情報を持っているのは「ユーザーエンティティ」であり、リレーションシップを組むことで情報を参照出来るようになります。
リレーションシップを組んでみます。
「高度」タブを開き、リレーションシップを追加します。
「ユーザー」を選択します。
再度「フィールド」の追加を選択すると、カテゴリにユーザーが追加されています!
「ユーザー」の「描画されたエンティティ」を選択すると…
ユーザーアイコンが表示されました!
「コンテクスチュアルフィルター」使用して関連する記事を表示する
現在閲覧している記事に関連する他の記事を表示してみます。
今回は同じタクソノミータームを持つ記事を、関連記事とします。
あらかじめ、記事にはタグ(タクソノミーターム)を設定しています。
まずは、記事一覧の作成です。
この時点では、全ての記事が一覧として出ている状態です。
「高度」タブを開き、コンテクスチュアルフィルターを追加します。
「タクソノミーターム ID を含む」を選択します。
詳細な設定は、下記の通りです。
ノードに紐づくタクソノミータームの ID で絞り込みます。
このままでは、現在閲覧している記事も一覧に出てきてしまうため、もう 1 つコンテクスチュアルフィルターを追加します。
上記のコンテクスチュアルフィルターで抽出されたデータを更に絞り込むイメージです。
実際に記事にブロックを配置して確認してみると…
滋賀店に関する記事だけが表示されました!
「リレーションシップ」と「コンテクスチュアルフィルター」でコンテンツに関連する記事を表示する
最後は、2 つを合わせて使用する方法をご紹介します。
基本的に、リレーションシップとコンテクスチュアルフィルターは合わせて使われることが多いです。
コンテンツの中に、関連する記事を表示させてみます。
あらかじめ、記事には関連するコンテンツを設定しておきます。
まずは Views で記事の一覧を作成します。
リレーションシップを組みます。
これにより、記事の「関連する店舗」に設定されたコンテンツが参照出来るようになります。
コンテクスチュアルフィルターを追加し、「ID」を選択します。
「リレーションシップ」に、先ほど参照したフィールドを設定します。(画像 ①)
また、閲覧しているコンテンツのノード ID (URL の/node/num の部分)で表示する記事を変えるために、タイプは「URL から取得したコンテンツ ID」に設定します。(画像 ②)
コンテンツに、作成したブロックを配置してみると…
東京店舗に関連する記事だけが表示されました!
まとめ
一見少し取っ付きにくいリレーションシップとコンテクスチュアルフィルターですが、使用することで Views の可能性がぐっと広がることが分かりました。
これからも初心者目線の記事を書いていけたらと思うので、よろしくお願いいたします!
募集しています
スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。