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