Начиная с Элементный модуль для Silverstripe 4, и по умолчанию он перечисляет Элементарные области на главной вкладке «Содержимое». Я хотел бы поместить их в их собственную вкладку.
Как мне это сделать в функции getCMSField класса моей страницы?
Что у меня есть:
Конкретная страница(ElementPage) для использования модуля
ElementPage:
extensions:
- DNADesign\Elemental\Extensions\ElementalPageExtension
В ElementPage.php
У меня есть два $has_one
, например:
private static $has_one = [
'LeftElemental' => ElementalArea::class,
'RightElemental' => ElementalArea::class
];
Они работают нормально, поля отображаются и могут отображаться вtemplate.
Попытка поместить их на собственную вкладку, getCMSFields:
public function getCMSFields()
{
$fields = parent::getCMSFields();
// To remove the default added one
$fields->removeByName('ElementalArea');
$fields->addFieldToTab('Root.LeftContentBlocks', ElementalArea::create('LeftElementalID'));
return $fields;
}
Результирующая ошибка:
[Предупреждение пользователя] DataObject :: __ конструкция прошлаЗначение 'LeftElementalID'. Предполагается передать массив, взятый прямо из базы данных. Возможно, вам следует использовать DataList :: create () -> First ();вместо этого?
Я не ожидал, что это сработает, но я не вижу нужной ему подписи создания.
РЕДАКТИРОВАТЬ:
Это, кажется, делает это:
public function getCMSFields()
{
$fields = parent::getCMSFields();
// To remove the default added one
$fields->removeByName('ElementalArea');
$fields->addFieldToTab('Root.LeftContentBlocks', ElementalAreaField::create('LeftElemental', $this->LeftElemental(), $this->getElementalTypes()));
$fields->addFieldToTab('Root.RightContentBlocks', ElementalAreaField::create('RightElemental', $this->RightElemental(), $this->getElementalTypes()));
return $fields;
}
Я не совсем уверен, $this->getElementalTypes()
- это то, что я должен делать. Любые улучшения / исправления приветствуются.