获取不同的模型CMS字段,将其添加到CMS选项卡

时间:2019-03-11 23:12:34

标签: php silverstripe

在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模型的字段。

我以为这会为其CMS字段询问相关的LoremIpsum模型:

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

那么我该如何仅移动LoremIpsum模型的那些字段?

1 个答案:

答案 0 :(得分:1)

您好,欢迎来到StackOverflow。您想要实现什么?

似乎您要从其他数据对象编辑has_one关系数据对象。有适用于这种情况的即用型和经过测试的模块,例如productSearchParams,因为即使您设法显示这些字段,SilverStripe也会假定这些值属于当前模型而不是关系。然后,您将需要进行额外的工作以将其保存回来,等等。

当前模型和LoremIpsum模型中的某些字段具有相同的名称,例如ID,标题,已创建。这会在上面的代码中引起问题,例如,您只能有一个字段。表单中的ID。

“ hasoneedit”模块通过为关系的字段添加前缀来克服此问题。