Craft CMS の Element API プラグインで Super Table のデータを取得する
2017-08-31
4分で読了
更新: 2025-12-14
目次
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 という項目が定義してあります。
[
'company.json' => [
'elementType' => ElementType::Entry,
'criteria' => ['section' => 'company'],
'transformer' => function(EntryModel $entry) {
return [
'title' => $entry->title,
'jsonUrl' => UrlHelper::getUrl("company/{$entry->id}.json"),
];
},
],
'company/.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,
);
}
}
以上です。