Silverstripe ListboxField вложенные данныеобъекты

У меня есть следующая структура, которую я должен импортировать из XML-канала:

  • Тип компании
    • CompanySubType

например:

  • инженерия
    • Строительная инженерия
    • Архитектурное Проектирование

Я создал оба объекта DataObject, которые выглядят так:

ExpertiseTag.ss

class ExpertiseTag extends DataObject {
    private static $db = [
        'SortID'                        => 'Int',
        'Title'                         => 'Varchar'
    ];

    private static $has_one = [
        'MemberPage'                    => 'MemberPage'
    ];

    private static $has_many = [
        'ExpertiseSubTags'   => 'ExpertiseSubTag'
    ];

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->removeByName('SortID');
        $fields->removeByName('MemberPageID');

        $fields->addFieldToTab('Root.Main', TextField::create( 'Title', 'Tag naam' ) );

        return $fields;
    }
}

ExpertiseSubTag.ss

class ExpertiseSubTag extends DataObject {
    private static $db = [
        'SortID'                    => 'Int',
        'Title'                     => 'Varchar'
    ];

    private static $has_one = [
        'ExpertiseTag'      => 'ExpertiseTag'
    ];

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->removeByName('SortID');

        $fields->addFieldToTab('Root.Main', TextField::create( 'Title', 'Tag naam' ) );

        return $fields;
    }
}

Возможно, ListboxField не является подходящим способом, но в идеале я хотел бы создать ситуацию, в которой я мог бы видеть вложенную структуру и делать множественный выбор. Для продолжения: На странице-держателе я создал ListboxField, в котором я хочу перечислить оба объекта данных, кроме одного из объектов данных.

ListboxField выглядит примерно так:

$fields->addFieldToTab('Root.Expertise', ListboxField::create(
    'ExpertiseTags',
    'Expertise (tags):',
    ExpertiseTag::get()->map('ID', 'Title')->toArray(),
    $this->ExpertiseTags()->column('ID'),
    null,
    true
));

Как я могу изменить или воссоздать код для достижения ситуации, как описано выше? Может быть, ListboxField не способ пойти сюда.

0 ответов

Другие вопросы по тегам