我目前正在尝试在GridField中管理类的项目以及子类的项目(想想包含'Apple'和'Banana'项的GridField,这两个子类来自'Fruit')。
我已经找到了如何使用详细信息表单中的某个ClassName下拉列表来切换项目的类(因为它是在SiteTree项目的“设置”选项卡中包含的“页面类型”下拉列表中完成的),并且它正常工作。
我现在要做的是在创建时选择子类,其下拉列表包含GridField的“添加”按钮旁边的所有类。 不幸的是,'添加'按钮似乎在LeftAndMain中调用了一些'EditForm'动作,我无法弄清楚从哪里开始。
是否有人知道可以延长一些GridFields的类等?
答案 0 :(得分:2)
此功能非常有用,所以我在网格字段扩展模块中实现了它:the commit in question。
要启动并运行,请执行以下代码。它将自动使用父类和任何子类填充下拉列表,并让用户选择要创建的类型。
$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字段。