微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverstripe 4 在 cms 选项卡中添加 GridField

如何解决Silverstripe 4 在 cms 选项卡中添加 GridField

亲爱的 Silverstripe 4 用户,我需要有人向我解释如何解决我的问题。我正在构建电子商务模块,我创建数据对象以插入新产品和类别,没有任何问题。

当我尝试为新产品创建相关产品时,问题就开始了。我从 has_many relatian 和 ListBoxField 这样做,这很好用,但我不想在列表框归档的情况下这样做。我想创建像 (Root.RelatedProducts) 这样的新标签,并在那里有网格字段,我可以在其中添加现有产品。

我知道创建带有标题、操作和其他网格配置的网格。当我创建网格时,我只能添加新产品。

如何实现选择现有产品并在特定选项卡的网格中显示

class 产品扩展页面 {

private static $has_many = [
    'RelatedProducts' => Product::class
];

public function getCMSFields()
{
    $fields = parent::getCMSFields();

  $gridFieldConfig = GridFieldConfig_RecordEditor::create();


    $gridFieldConfig = GridFieldConfig::create()->addComponents(
        new GridFieldToolbarHeader(),new GridFieldAddNewButton('toolbar-header-right'),new GridFieldSortableHeader(),new GridFieldDataColumns(),new GridFieldPaginator(10),new GridFieldEditButton(),new GridFieldDeleteAction(),new GridFieldDetailForm()
    );
    $gridField = new GridField("RelatedProducts","Related products",$products,$gridFieldConfig);

}

}

解决方法

如果您想将现有产品添加到关系中,您可以使用另一个 gridfield 配置。 Silverstripe 有一些可用的预定义配置,您选择了 Gridfield_RecordEditor

如果您使用 Gridfield_RelationEditor,您还会获得一个组件来搜索现有记录。来自 RelationEditor 的文档块:

类似于 {@link GridFieldConfig_RecordEditor},但增加了功能 处理多对多或多对多关系。

允许搜索现有记录以添加到关系中, 从关系中分离列出的记录(而不是删除它们 从数据库中),并自动向其中添加新创建的记录。

您可以更像这样配置它:

 GridFieldConfig_RelationEditor::create()
    ->getComponentByType('GridFieldAddExistingAutocompleter')
    ->setSearchFields('MyField');

顺便说一下:我会使用 many_many 关系,因为一个产品可能与多个产品相关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。