2022-04-06

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

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

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

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

20220330 0822

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

<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のエントリ(関連付けられている側)を見るとこんな感じになる。

20220330 0826

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

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

20220330 0827

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