Concrete5でプログラムからExpressのエンティティと属性(カラム)を作成する方法

Express-Create

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、Concrete5でプログラムからExpressのエンティティと属性を作成する方法について解説していきます。

Concrete5でプログラムからExpressのエンティティと属性を作成する方法

基本的な処理のフローは次のとおりです。

  1. Express::buildObject()で、Express-エンティティ(Table)を作成する
    • Class: \Concrete\Core\Express\ObjectBuilder で Expressのエンティティ(Table)をCreateする
  2. 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!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

プログラミング学習・エンジニア転職関連の情報

自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)

『GEEK JOBキャンプ』スピード転職コース(無料)

【IT道場】入校時0円! 就職目的プログラミングスクール

エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】

『techgym』 (Python特化・無料)

PHP / Laravel書籍

参考・引用

  1. [concrete 8.2+] Expressオブジェクトとセレクトボックス属性をパッケージインストールで追加する

最近の投稿