SilverStripe GridField:在“添加”按钮中添加“类型”下拉列表

时间:2013-01-30 20:34:54

标签: silverstripe

我目前正在尝试在GridField中管理类的项目以及子类的项目(想想包含'Apple'和'Banana'项的GridField,这两个子类来自'Fruit')。

我已经找到了如何使用详细信息表单中的某个ClassName下拉列表来切换项目的类(因为它是在SiteTree项目的“设置”选项卡中包含的“页面类型”下拉列表中完成的),并且它正常工作。

我现在要做的是在创建时选择子类,其下拉列表包含GridField的“添加”按钮旁边的所有类。 不幸的是,'添加'按钮似乎在LeftAndMain中调用了一些'EditForm'动作,我无法弄清楚从哪里开始。

是否有人知道可以延长一些GridFields的类等?

2 个答案:

答案 0 :(得分:2)

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

Grid Field Extensions Module

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

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

答案 1 :(得分:0)

我刚刚在SS 3.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字段。