Craft CMS の Element API プラグインで Super Table のデータを取得する方法をご紹介します。
Element API プラグインは、Craft CMS から任意の形の JSON を取得できるようになるプラグインです。つまり、エンドポイントを自分で定義することで、好みの URL で、好きな形(項目)の JSON を取得できるようになります。
今回は、この Element API で Super Table タイプのデータを取得する方法を紹介します。
先に最終的な形を言ってしまうと、 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 のデータを取得するとき、 '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,
);
}
}
以上です。