Получить различные поля модели CMS, добавить их на вкладку CMS - PullRequest
1 голос
/ 12 марта 2019

В администраторе модели Silverstripe (версия 3) как я могу получить коллекцию полей из другой модели, чтобы добавить их к администратору этой модели?

Я пыталсяэто с помощью FieldList :: addFieldsToTab :

$loremIpsumTab = Tab::create('LoremIpsum');
$fields->fieldByName('Root')->insertAfter('Main', $loremIpsumTab);

$loremIpsumFields = (
    $this->LoremIpsum()->getCMSFields()
        ->fieldByName('Root.Main')->Fields());

$fields->addFieldsToTab('Root.LoremIpsum', $loremIpsumFields);

Это создает вкладку правильно, но перемещает поля неправильно: все поля из 'Root.Main' являютсяперемещены, не только те, что для модели LoremIpsum.

Я предполагал, что это запросит связанную модель LoremIpsum для ее полей CMS:

    $this->LoremIpsum()->getCMSFields()
        ->fieldByName('Root.Main')->Fields()

Так как я могу перемещать только эти поля для модели LoremIpsum?

1 Ответ

1 голос
/ 14 марта 2019

Здравствуйте и добро пожаловать в StackOverflow.Что вы хотите достичь?

Кажется, вы хотите отредактировать объект данных отношения has_one из вашего другого объекта данных.Для этого сценария есть готовые к использованию и протестированные модули, например, https://github.com/stevie-mayhew/hasoneedit/tree/3.x, потому что даже если вам удастся отобразить поля, SilverStripe предполагает, что эти значения принадлежат текущей модели, а не отношению.Затем у вас будет дополнительная работа по его сохранению и т. Д. *

Некоторые поля в вашей текущей модели и в модели LoremIpsum имеют одинаковые имена, например, ID, Название, Создан.Это вызывает проблемы в приведенном выше коде, поскольку у вас может быть только одно поле, например, ID в форме.

Модуль "hasoneedit" преодолевает это путем добавления префиксов к полям отношения.

...