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

问题描述 投票:1回答:1

在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模型的那些字段呢?

php silverstripe
1个回答
1
投票

您好,欢迎来到StackOverflow。你想达到什么目的?

您似乎想要从其他数据对象编辑has_one关系数据对象。有针对此场景的即用型和经过测试的模块,例如: https://github.com/stevie-mayhew/hasoneedit/tree/3.x,即使您设法显示字段,SilverStripe也会假定这些值属于当前模型而不属于关系。然后你将有额外的工作来保存它等...

您当前模型和LoremIpsum模型中的某些字段具有相同的名称,例如ID,标题,已创建。这会导致上面的代码出现问题,因为您只能有一个字段,例如表格中的ID。

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

© www.soinside.com 2019 - 2024. All rights reserved.