Craft CMS ですべてのエントリーを取得したり動的なキーの連想配列を作ったり数を出力したりする Tips
2017-12-14
4分で読了
更新: 2025-12-14
目次
この記事は「Craft CMS Advent Calendar 2017」の 14 日目の記事です。今日は Craft CMS の基本的なお話になります。
Craft CMS でエントリーの情報を取得するとき、例えばセクションのハンドル名が blog だったとすると、下記のように取得できます。
{% set blogs = craft.entries.section('blog') %}
すべてのエントリーを取得する
例えば、Craft の blog セクションに 3,000 記事が登録されていたとすると、上記の書き方だと limit の初期値である 100 件までしか取得できません。
もし、すべてのエントリーを取得したい場合は下記のようにして limit に null を渡せば OK です。
{% set blogs = craft.entries.section('blog').limit(null) %}
これを知らないと、ついつい .limit(99999) とかやりそうですよね。
すべてのセクションのすべてのエントリーを取得する
ついでに、すべてのセクションのすべてのエントリーを取得したい時は下記のよう書きます。
{% for entry in craft.entries.limit(null) %}
- {{ entry.title }}
{% endfor %}
すべてのセクションのすべてのエントリーをセクションごとに取得する
この場合は下記のように書きます。
{% for section in craft.sections.getAllSections() %}
{{ section.name }}
{% for entry in craft.entries.section(section.handle).limit(null) %}
- {{ entry.title }}
{% endfor %}
{% endfor %}
セクションに属するエントリーの数を取得する
この場合は下記のように書きます。 count() を使えば簡単です。
{% for section in craft.sections.getAllSections() %}
- {{ section.name }} = {{ craft.entries.section(section.handle).limit(null).count() }} エントリーあります。
{% endfor %}
ちなみに一度配列にセットしてあれば、 {{ 配列変数名 | length }} でとれますね。
動的なキーの連想配列をセットし、動的なキーで連想配列から値を取り出す
例えば entries という連想配列があって、そのキーにセクションのハンドル名、値にそのセクションのすべてのエントリー、のような変数を作りたいときは下記のようにします。ついでにその連想配列の値を動的に取り出してみます(このテンプレートだけ見ると無駄が多いですが Tips として)。
{# キーを動的に連想配列をセットする #}
{% set entries = {} %}
{% set sections = {} %}
{% for section in craft.sections.getAllSections() %}
{% set entries = entries|merge({ (section.handle) : craft.entries.section(section.handle).limit(null)} ) %}
{% set sections = sections|merge({ (section.handle) : section.name }) %}
{% endfor %}
{# 動的にセットした連想配列を取り出す #}
{% for sectionHandle, sectionEntries in entries %}
{# 動的なキーで連想配列から取り出す #}
{{ attribute(sections, sectionHandle) }}({{ sectionHandle }})
{% for entry in sectionEntries %}
- {{ entry.title }}
{% endfor %}
{% endfor %}
ポイントは、
| merge()で動的にセットする- その際に動的なキーを
()で囲む attribute()で取り出す
といったところです。
以上です。