Drupal: 異なるコンテンツタイプのコンテンツを相互にリンクさせる

2023/04/20に公開

概要

異なるコンテンツタイプのコンテンツを相互にリンクさせる方法を調べたので、その備忘録です。

具体的には、以下のitem 1image 1というコンテンツをiiif_image2というフィールドを介してつながっています。

上記に対して、image 1というページに、item 1へのリンクを設けることが目的です。

この実現にあたり、以下の記事を参考にしました。

https://drupal.stackexchange.com/questions/255447/view-for-entity-reference-reverse-backwards-forwards

方法

ビューの追加

/admin/structure/views に移動し、 +ビューを追加

「Create a block」オプションをチェックします

ビューの設定

次のページで、Advancedの設定を行います。

リレーションシップ

field_iiif_image2のリレーションシップを追加します。これは、2つのコンテンツタイプを関連付けるために重要です。

Require this relationshipにチェックを入れる必要があります。このフィールドを持たない場合には表示しない、という挙動になるものと理解しました。

コンテキストフィルター

次に、現在のコンテンツタイプのランディングページにコンテキストフィルターを追加します。このようにして、ビューで使用される実際のノードIDを取得します。これで、field_iiif_image2で同じノードIDを持つページのみを見つけることができます。

IDで探す(コンテンツ)

デフォルト値を提供-> URL からのコンテンツ IDにチェックを入れます

次のような結果になります。

Update previewの箇所で、メディアのノードID(ここでは、62602)を入力してみます。本メディアが参照されているアイテムへのリンクが表示されます。

ブロックの追加

以下にアクセスします。

/admin/structure/block

例えば、「Content」の横の「Place block」ボタンを押します。

/node/*に配置してみます。

結果、冒頭のように、当該imageが属するitemを表示することができます。

まとめ

使用している用語に統一性がなく、わかりにくい点が多く恐縮ですが、参考になりましたら幸いです。

Discussion