Silverstripe 如何在管理CMS表单的选项卡下放置元素字段
从for Silverstripe 4开始,默认情况下,它会在主“内容”选项卡下列出元素区域。我想让他们自己付账 如何在我的页面类getCMSField函数中实现这一点 我得到的是: 用于使用模块的特定页面(ElementPage)Silverstripe 如何在管理CMS表单的选项卡下放置元素字段,silverstripe,silverstripe-4,Silverstripe,Silverstripe 4,从for Silverstripe 4开始,默认情况下,它会在主“内容”选项卡下列出元素区域。我想让他们自己付账 如何在我的页面类getCMSField函数中实现这一点 我得到的是: 用于使用模块的特定页面(ElementPage) ElementPage: extensions: - DNADesign\Elemental\Extensions\ElementalPageExtension 在ElementPage.php中,我有两个$has\u one如下: private s
ElementPage:
extensions:
- DNADesign\Elemental\Extensions\ElementalPageExtension
在ElementPage.php
中,我有两个$has\u one
如下:
private static $has_one = [
'LeftElemental' => ElementalArea::class,
'RightElemental' => ElementalArea::class
];
这些工作正常,字段显示并可以在模板中渲染它们
试图将它们放在自己的选项卡下,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::\u构造传递了该值
“LeftElementId”。它应该通过一个数组,直接取下
从数据库中。也许您应该使用DataList::create()->First();
相反
我真的没想到这会起作用,但我看不到它需要的create签名
编辑:
这似乎完成了:
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()
是我应该做的。欢迎任何改进/更正。您应该将解决方案作为答案发布,而不是编辑您的解决方案question@RobbieAverill我没有,因为我不相信这是一个解决方案(见最后一行)。我是如何做到这一点的?