Silverstripe ListboxField вложенные данныеобъекты - PullRequest
0 голосов
/ 15 мая 2018

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

  • CompanyType
    • CompanySubType

например:

  • Engineering
    • структурно-инжиниринговая
    • архитектурно-инженерный

Я создал оба объекта 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 не подходит для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...