【问题标题】:SilverStripe GridField: add a 'type' dropdown to the 'add' buttonSilverStripe GridField:向“添加”按钮添加“类型”下拉列表
【发布时间】:2013-01-30 20:34:53
【问题描述】:

我目前正在尝试在 GridField 中管理一个类的项目以及子类的项目(想想一个包含“Apple”和“Banana”项目的 GridField,这两个项目都是“Fruit”的子类)。

我已经找到了如何使用详细信息表单中的一些 ClassName 下拉菜单来切换项目的类(就像在 SiteTree 项目的“设置”选项卡中包含的“页面类型”下拉菜单中所做的那样),并且工作正常。

我现在想做的是在创建时选择子类,在 GridField 的“添加”按钮旁边有一个包含所有类的下拉列表。 不幸的是,“添加”按钮似乎在 LeftAndMain 中调用了一些“EditForm”操作,我不知道从这里去哪里。

有谁知道这是否可以扩展一些 GridFields 的类等?

【问题讨论】:

  • 这绝对可以做到——您需要考虑创建自己的自定义网格字段组件。有关示例,请参见 GridFieldAddNewButton 和 GridFieldDetailForm。网格字段文档也有一些细节。
  • 我已经查看了那些 GridField 类和文档,但我还不太明白。也许有人知道一个模块与我所追求的类似,所以我可以检查它的代码?

标签: silverstripe


【解决方案1】:

这个功能会非常有用,所以我在我的网格字段扩展模块中实现了它:the commit in question

Grid Field Extensions Module

要启动并运行它,请执行以下代码。它会自动填充父类和任何子类的下拉列表,并让用户选择要创建的类型。

$config = $grid->getConfig();
$config->removeComponentsByType('GridFieldAddNewButton');
$config->addComponent(new GridFieldAddNewMultiClass());

【讨论】:

  • 太棒了,谢谢!只是无法让它工作,每当我添加一个项目时,我都会得到一个空白屏幕,上面写着“在类 GridField 上不允许操作'添加-多类'”。尝试将操作添加到 GridField::$allowed_actions 但收到消息“操作 'add-multi-class' 在类 GridField 上不可用。”然后。是否需要更多配置?
  • 请求的 URL 是什么?它应该类似于 /add-multi-class/ClassName
  • 请求的url是'/admin/pages/edit/EditForm/field/SimpleFormFields/add-multi-class',其中'SimpleFormFields'是我要添加的DataObject基类
  • 有一阵子没仔细看这个,但我刚刚基于 cms/framework master 分支进行了全新安装,它现在正在工作。再次感谢!
【解决方案2】:

我刚刚在 SS 3.1 中做了类似的事情,这是一个 2 步过程,但可以修改为 1 步。

在您的超类中,在 getCMSFields() 中为“ClassName”添加一个下拉列表,例如:

public function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab("Root.Main", 
        new DropdownField("ClassName", "Type", 
            array(
                "Apple" => "Apple", 
                "Banana" => "Banana",

            )
        )
    );

    return $fields;
}

然后,当他们在该页面上单击保存时,它将显示所选子类的获取 CMS 字段。

【讨论】:

  • 感谢您的回答,但是在阅读我的问题的第二段时,您会发现我之前已经实施过此类解决方案
猜你喜欢
  • 1970-01-01
  • 2014-06-14
  • 2021-10-08
  • 2016-05-22
  • 1970-01-01
  • 2023-03-22
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多