Craft CMS のテンプレートで JSON を返す

Craft CMS のテンプレートで JSON を返す方法をご紹介します。

Craft CMS Logo

例えば、 entry がセットされているときはエントリーの情報を、セットされていないときはエラーを返したいとします。

結論からいうと Twig テンプレートは次のようになります。

{% header 'Content-Type: application/json; charset=utf-8' %}
{% set response = { status: 'error' } %}
{% if entry is defined %}
  {% set response = {
    status: 'success',
    id: entry.id,
    title: entry.title,
    sectionId: entry.sectionId,
  } %}
{% endif %}
{{ response | json_encode() | raw }}

重要なのは先頭でヘッダーをセットすることと、出力するところで | json_encode() | raw を組み合わせるところです。

なお、Craft の場合は Element API for Craft CMS というプラグインで、自由に API を定義できます。 上記のようにテンプレートで実装するのが良いか、API で実装するのが良いか、要件と照らし合わせて選択したら良いと思います。

以上です。

Published 2018-08-27
Updated 2020-07-28