同じセクション内で、エントリAが別のエントリBを選択している場合に、エントリB側でエントリAを取り出すというのをやってみた。
【CraftCMS】エントリフィールドをキーとしてエントリを取得する - Qiita
https://qiita.com/SHIN_DEVELOP...
で @BUN がコメントしてる内容を参考にさせてもらって動いた。
ドキュメントサイトとしては以下のリレーションの説明の中の「行列を経由する」が参考になった
リレーション | Craft 3 ドキュメント
https://docs.craftcms.com/v3/j...
今回の対象が Matrix に持たせてあるブロックなので。
CMSのフィールド構成
構成(hundle)としては
セクション:article
本文部分を管理するMatrixフィールド:articlebody
記事選択のブロック:rel_article
記事詳細ページ用のテンプレートで処理するので以下のような感じで取り出す。
例えば別のテンプレート(記事を一覧表示させてるとか)であれば
こんな感じでまず id 指定など(slugとかタイトルとか)で取り出したものをtargetElement に指定すればよい。
エントリの選択関係と表示状態
このエントリで
MacBookAir のキーボードを修理に出した | mersy note
https://note.mersy418.com/arti...
以下のエントリを選択している。
MacBook をキーボードの修理にだした | mersy note
https://note.mersy418.com/arti...
管理画面
表示側
関連記事として表示する
あとはそれを取り出して表示させる。
最終的にはこんな感じで。
{# 自分を参照しているエントリがある場合はそれを表示 #}
{% set relatedEntries = craft.entries.section('article').relatedTo({
targetElement: entry,
field: 'articlebody.rel_article'
}).all() %}
{% if relatedEntries %}
<div class="card">
<div class="card-header">関連記事リスト</div>
<ul class="list-group list-group-flush">
{% for entry in relatedEntries %}
<li class="list-group-item"><a href="{{ entry.url }}">{{ entry.title }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
https://note.mersy418.com/article/mn-macbook
targetElement, sourceElement 慣れないと理解しづらいけど使いながら覚えていきたいところ。