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 не подходит для этого.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …