2023-03-14

Craft 4.4 で Single preloading の設定をしてシングルセクションのデータを取り出す #craftcms

Craft 4.4 は 5 にむけての準備リリース的なイメージ。

Craft 4.4 Released | Craft CMS
https://craftcms.com/blog/craf...

その一環で、カテゴリ、タグ、グローバルとかがエントリに集約されていく方向になっている。

The Entrification Plan | Craft CMS
https://craftcms.com/blog/entr...

シングルセクションがグローバルの代わりとして今後なっていくらしいので試してみた。

Single preloading. There’s a new preloadSingles config setting (enabled by default for new Craft projects) which will make all Single section entries available to Twig templates by their section handle, just like global sets.
https://craftcms.com/blog/craf...

別にこれをしないでも、シングルセクションのデータを取り出してそれぞれのフィールドデータを取り出すといったことをやれば問題はないが。

これまでの方法は @BUN のエントリとかが参考になる。

【Craft 3 サイト構築の基本】インデックスページのテンプレート作成(実装編) | BUN:Log
https://bunlog.dreamseeker.dev...

設定を有効にする

ひとまず .env に以下を記載して有効にする

CRAFT_PRELOAD_SINGLES=true

いろいろな設定をシングルに持たせる場合はこれがよさそう。
今後はシングルのうちどれを有効にするかとかもオプションになったりするのかもしれない。

管理データサンプル

管理画面側ではこんな感じで、リレーションを貼ったり、データを持たせておく。

20230311 151441

シングルのセクションは testSingle

フィールドデータの取り出し

普通にデータを取り出すのであれば、以下のコードで

<h2>testText1</h2>
{{testSingle.testText1}}

<h2>testText2</h2>
{{testSingle.testText2}}

問題無く取り出せる。

20230311 153509

エントリフィールドでリレーションのデータも

{% set relatedEntries = testSingle.testStructure.all() %}
{% if relatedEntries|length %}
  <ul>
    {% for rel in relatedEntries %}
      <li><a href="{{ rel.url }}">{{ rel.title }}</a></li>
    {% endfor %}
  </ul>
{% endif %}

こんな感じのコードで取り出せる

20230311 153505

いやー、便利。

グローバルは設定的な情報を柔軟に持たせられるし本当に便利。
グローバルはいくつも準備できてそれぞれに編集権限を設定できたけど、シングルもセクションなのでそれぞれ用意しておけば権限も設定できる。

細かい所ではあるけど、こういうののおかげでデータの管理がほんとしやすい。