Craft CMS プラグインの作法(セクション関連)

Craft CMSのプラグインを書くときの作法

スラッグでセクションを取得する

URLのslugでセクションからエントリーを1件取得する方法。

$criteria = craft()->elements->getCriteria(ElementType::Entry);
$criteria->section = 'sampleSection';
$criteria->slug = 'test-slug';
$entry = $criteria->first();

sampleSectionのsampleTagsフィールドでタグ検索した結果を取得する

$criteria->searchを使います。twigで記述した場合
{% set entries = craft.entries.section(‘sampleSection’).search(‘sampleTags:test’) %}
と等価です。

$criteria          = craft()->elements->getCriteria(ElementType::Entry);
$criteria->section = "sampleSection";
$criteria->search  = "sampleTags:test";
$entries           = $criteria->find();

新規にセクションを作成する

プラグインでセクションの新規エントリーを保存する方法。

$currentUser = craft()->userSession->getUser();
$section = craft()->sections->getSectionByHandle('sampleSection');
$section->getEntryTypes();
$entry = new EntryModel();
$entry->sectionId = $section->id;
$entry->enabled = true;
$entry->authorId = $currentUser->id;
// ToDo : セクションのフィールドを埋める
$success = craft()->entries->saveEntry($entry);

セクションのSuper Tableフィールドを更新する

new1,new2,new3…のインデックスを持った配列を設定します。新規作成時、更新時どちらも同じ方法です。

$field = craft()->fields->getFieldByHandle("sampleSuperTableField");
$blockTypes = craft()->superTable->getBlockTypesByFieldId($field->id);
$blockType = $blockTypes[0];
$superTableData = array();
$tableValues = array(
'new1' => array(
'sampleTextField' => 'foobar',
'sampleAssetFileField' => $assets,
),
'new2' => array(
'sampleTextField' => 'foobar',
'sampleAssetFileField' => $assets,
),
);
foreach($tableValues as $key => $value) {
$superTableData[$key] = array(
'type'    => $blockType->id,
'enabled' => true,
'fields'  => $value,
);
}
$entry->setContentFromPost(array("sampleSuperTableField" => $superTableData));
$success = craft()->entries->saveEntry($entry);

アセットフィールドの更新

アセットフィールドはIDの配列なので、そのように設定します。タグフィールドやカテゴリフィールドも基本的に同じです。

$entry->getContent()->setAttributes(array(
"sampleAssetField" => array($assetModel->id),
));
$success = craft()->entries->saveEntry($entry);

コメント

タイトルとURLをコピーしました