2022/4/6
Tag : Craft CMS

Craft CMS のエントリ編集画面で、そのエントリが関連付けられているエントリをテンプレートで表示する

セクションAのエントリからセクションBのエントリを関連付けるということはよくやる話で。
その時に B側のエントリにもAのエントリから関連付けられているということを設定しておきたい、といった双方向の関連付けをしたい場合というのもある。

そういうのはプラグインでやるしかなさそうなきはするが、単純に関連付けされている元のエントリを出すだけであればテンプレートと入力タイプで設定できる。

まずはこんな感じでセクションBの入力タイプのフィールドレイアウトの設定で、 UIエレメントのフィールドのうち、テンプレートを読み込むフィールドを追加する。

その上で、ここで指定したテンプレートで以下のような感じで記載する。

<div>
<p>このエントリのIDは {{element.id}} です</p> {# 確認用 #}
{% set _id = element.id %}
{% set _entry = craft.entries.id(_id).one() %} 
{% if _entry %}
{% set entries = craft.entries.section("test1").testStructure(_entry).all()%}
<h2>関連付けられてるエントリ</h2>
<table>
{% for entry in entries %}
<tr>
<th>{{ entry.title }}</th>
<td>{{entry.status }}</td>
</tr>
{% endfor %}
</table>
{% else %}
<p>IDまだ</p>
{% endif %}
</div>

セクションA(この場合の test1)のエントリがテストBのエントリを選択しているとして、
関連付けているフィールドは testStructure という感じで。

セクションBのエントリの編集画面では element.id で表示しているエントリのIDがとれる。
そこからエントリを取り出して _entry にセットして判定に使っていく。

セクションBのエントリ(関連付けられている側)を見るとこんな感じになる。

関連付けられているエントリの情報が出ている。
ここから管理画面や表側へのリンクもできそう。

関連付けているエントリの方。

どのエントリに関連付けられているか?が知りたいときにはサクッと出来る気がする。