• Home
  • Craft CMS
  • Craft CMS ですべてのエントリーを取得したり動的なキーの連想配列を作ったり数を出力したりする Tips

Craft CMS ですべてのエントリーを取得したり動的なキーの連想配列を作ったり数を出力したりする Tips

この記事は「Craft CMS Advent Calendar 2017」の 14 日目の記事です。今日は Craft CMS の基本的なお話になります。

Craft CMS でエントリーの情報を取得するとき、例えばセクションのハンドル名が blog だったとすると、下記のように取得できます。

{% set blogs = craft.entries.section('blog') %}

すべてのエントリーを取得する

例えば、Craft の blog セクションに 3,000 記事が登録されていたとすると、上記の書き方だと limit の初期値である 100 件までしか取得できません。

もし、すべてのエントリーを取得したい場合は下記のようにして limitnull を渡せば OK です。

{% set blogs = craft.entries.section('blog').limit(null) %}

これを知らないと、ついつい .limit(99999) とかやりそうですよね。

すべてのセクションのすべてのエントリーを取得する

ついでに、すべてのセクションのすべてのエントリーを取得したい時は下記のよう書きます。

<ul>
  {% for entry in craft.entries.limit(null) %}
  <li>{{ entry.title }}</li>
  {% endfor %}
</ul>

すべてのセクションのすべてのエントリーをセクションごとに取得する

この場合は下記のように書きます。

{% for section in craft.sections.getAllSections() %}
<h2>{{ section.name }}</h2>
<ul>
    {% for entry in craft.entries.section(section.handle).limit(null) %}
    <li>{{ entry.title }}</li>
    {% endfor %}
</ul>
{% endfor %}

セクションに属するエントリーの数を取得する

この場合は下記のように書きます。 count() を使えば簡単です。

<ul>
  {% for section in craft.sections.getAllSections() %}
  <li>{{ section.name }} = {{ craft.entries.section(section.handle).limit(null).count() }} エントリーあります。</li>
  {% endfor %}
</ul>

ちなみに一度配列にセットしてあれば、 {{ 配列変数名 | 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 %}
  {# 動的なキーで連想配列から取り出す #}
  <h2>{{ attribute(sections, sectionHandle) }}({{ sectionHandle }})</h2>
  <ul>
    {% for entry in sectionEntries %}
      <li>{{ entry.title }}</li>
    {% endfor %}
  </ul>
{% endfor %}

ポイントは、

  • | merge() で動的にセットする
  • その際に動的なキーを () で囲む
  • attribute() で取り出す

といったところです。

以上です。

Recent Entries

Pickup Categories

Movable Type

CMSとして国内5万サイト以上に導入されている Movable Type に関する記事です。

Craft CMS

CMS 業界で注目の Craft CMS に関する記事です。Craft CMS はチーム全体をハッピーにしてくれる素晴らしい CMS です。