Как в администраторе модели Silverstripe (версия 3) получить набор полей из модели разные, чтобы добавить их в администратор этой модели?
Я пробовал это, используя Филдлист:: аддфиелдстотаб:
$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?






Здравствуйте и добро пожаловать в StackOverflow. Чего вы хотите достичь?
Кажется, вы хотите отредактировать объект данных отношения has_one из другого вашего объекта данных. Для этого сценария есть готовые и протестированные модули, например. https://github.com/stevie-mayhew/hasoneedit/tree/3.x , потому что даже если вам удастся отобразить поля, SilverStripe предполагает, что эти значения принадлежат текущей модели, а не отношению. Тогда у вас будет дополнительная работа, чтобы сохранить его обратно и т. д.
Некоторые поля в вашей текущей модели и в модели LoremIpsum имеют одно и то же имя, например. ID, Название, Создан. Это вызывает проблемы в вашем коде выше, потому что вы можете иметь только одно поле, например. ID в форме.
Модуль «hasoneedit» решает эту проблему, добавляя префикс к полям отношения.
Что ж, SS не является большой монолитной CMS, но ее можно легко расширить, если готовых решений недостаточно для ваших нужд. Вот почему у него много точек расширения.
Я надеялся, что у Silverstripe уже есть способ запросить это без дополнительной зависимости. Спасибо за ответ.