Craft CMS の Element API プラグインで Super Table のデータを取得する

Craft CMS の Element API プラグインで Super Table のデータを取得する方法をご紹介します。

Craft CMS Logo

Element API プラグインは、Craft CMS から任意の形の JSON を取得できるようになるプラグインです。つまり、エンドポイントを自分で定義することで、好みの URL で、好きな形(項目)の JSON を取得できるようになります。

今回は、この Element API で Super Table タイプのデータを取得する方法を紹介します。

elementapi.php

先に最終的な形を言ってしまうと、 elementapi.php の定義は下記のようになります。

この例では company セクションの一覧と、 company セクションの個別エントリーのデータを取得しています。また、 Super Table のフィールドハンドルは companyStaff です。

その companyStaff の Super Table には、 staffName staffEmail staffMobile staffKey という項目が定義してあります。

<?php
namespace Craft; 
return [
 'endpoints' => [
 'company.json' => [
 'elementType' => ElementType::Entry,
 'criteria' => ['section' => 'company'],
 'transformer' => function(EntryModel $entry) {
 return [
 'title' => $entry->title,
 'jsonUrl' => UrlHelper::getUrl("company/{$entry->id}.json"),
 ];
 },
 ],
 'company/<entryId:\d+>.json' => function($entryId) {
 return [
 'elementType' => ElementType::Entry,
 'criteria' => ['id' => $entryId],
 'first' => true,
 'transformer' => function(EntryModel $entry) {
 $staff = [];
 if (count($entry->companyStaff)) {
 foreach ($entry->companyStaff as $row) {
 $staff[] = array(
 'staffName' => $row->staffName,
 'staffEmail' => $row->staffEmail,
 'staffMobile' => $row->staffMobile,
 'staffKey' => $row->staffKey,
 'staffId' => $row->id,
 );
 }
 }
 return [
 'title' => $entry->title,
 'url' => $entry->url,
 'staff' => $staff,
 ];
 },
 ];
 },
 ]
];

Super Table のデータを取得

Super Table のデータを取得するとき、 'staff' => $entry->companyStaff, のように単純には取得できません。

したがって、事前に下記のようにループして $staff という配列に情報をセットして、それを return する必要があります。

 $staff = [];
 if (count($entry->companyStaff)) {
 foreach ($entry->companyStaff as $row) {
 $staff[] = array(
 'staffName' => $row->staffName,
 'staffEmail' => $row->staffEmail,
 'staffMobile' => $row->staffMobile,
 'staffKey' => $row->staffKey,
 'staffId' => $row->id,
 );
 }
 }

以上です。

Published 2017-08-31
Updated 2019-06-25