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

例えば、 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 で実装するのが良いか、要件と照らし合わせて選択したら良いと思います。

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...