Silverstripe 如何在管理CMS表单的选项卡下放置元素字段

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

从for Silverstripe 4开始,默认情况下,它会在主“内容”选项卡下列出元素区域。我想让他们自己付账

如何在我的页面类getCMSField函数中实现这一点

我得到的是:

用于使用模块的特定页面(ElementPage)

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我没有,因为我不相信这是一个解决方案(见最后一行)。我是如何做到这一点的?