こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Concrete5でプログラムからExpressのエンティティと属性を作成する方法について解説していきます。
目次
Concrete5でプログラムからExpressのエンティティと属性を作成する方法
基本的な処理のフローは次のとおりです。
Express::buildObject()
で、Express-エンティティ(Table)を作成する- Class: \Concrete\Core\Express\ObjectBuilder で Expressのエンティティ(Table)をCreateする
addAttribute()
で、Express-属性(Column)を作成する- selectタイプの属性(Column)なので、それに合わせたClassインターフェースを利用して、加工処理する
- 加工処理した設定情報を
addAttribute()
のパラーメーターとして渡す
<?php
use \Concrete\Core\Entity\Attribute\Key\Settings\SelectSettings;
use Concrete\Core\Entity\Attribute\Value\Value\SelectValueOptionList;
use Concrete\Core\Entity\Attribute\Value\Value\SelectValueOption;
// 1. 選択肢(Option-List)を受け取って、設定情報を返す。
function selectSettings($options, $isMultiple=false)
{
// 2. Select設定インスタンス
$settings = new SelectSettings();
// 3. SelectValueOptionListインスタンス
$list = new SelectValueOptionList();
// 4. Option-Listを加工して、インスタンスにSetする
$list->setOptions(selectOptions($options, $list));
// 9. 設定情報に、選択肢リストを登録する
$settings->setOptionList($list);
if($isMultiple)
{
$settings->setAllowMultipleValues(true);
}
return $settings;
}
// 5. 選択肢を受け取って、Objectインターフェースに合わせた加工をして返却する。
function selectOptions($optionArray, $list)
{
$options = [];
$displayOrder = 0;
foreach($optionArray as $option)
{
// 6. SelectValueOptionインスタンス
$o = new SelectValueOption();
// 7. SelectValueOptionインスタンスに1つ1つのOption情報を投入する
$o->setSelectAttributeOptionValue($option);
$o->setDisplayOrder($displayOrder);
$o->setOptionList($list);
if(is_object($o))
{
$options[] = $o;
++$displayOrder;
}
}
return $options;
}
// Express::buildObject() で、Express-エンティティ(Table)を作成する!
// Class: \Concrete\Core\Express\ObjectBuilder
$object = Express::buildObject('object', 'objects', 'Expressオブジェクト', $pkg = null);
// addAttribute() で、Express-属性(Column)を作成する!
$object->addAttribute('select', '性別', 'object_sex', selectSettings(['男', '女'], true));
$object->save();
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!