动态设置通过 Silverstripe GridField (CMS) 添加的对象的值
Dynamically set values of objects added via Silverstripe GridField (CMS)
我有一个基本的关系编辑器 GridField
,我需要动态 define/set 通过该 GridField
添加的任何对象的值,以及与 GridField
的上下文。
class Draw extends DataObject {
private static $has_many = array(
'Items' => 'Item'
);
}
当通过 Draw
的 Items
GridField
添加项目时,我需要定义一个值以在 Item::getCMSFields()
中使用
这里有一些好的建议:https://www.silverstripe.org/community/forums/data-model-questions/show/21517?start=7
您可以直接使用 GridField
的 GridFieldDetailForm
组件,并相应地设置字段。
对我有用的代码是:
$config = GridFieldConfig_RecordEditor::create();
if($this->exists()) {
// Ensure that fields are generated with knowledge of the parent
$editComponent = $config->getComponentByType('GridFieldDetailForm');
$item = new Item();
$item->DrawID = $this->ID;
$editComponent->setFields($item->getCMSFields());
}
$items = new GridField('Items', 'Items', $this->Items(), $config);
$fields->addFieldToTab('Root.Main', $items);
然后您可以从 Item::getCMSFields()
调用 Draw::get()->byID($this->DrawID)
我有一个基本的关系编辑器 GridField
,我需要动态 define/set 通过该 GridField
添加的任何对象的值,以及与 GridField
的上下文。
class Draw extends DataObject {
private static $has_many = array(
'Items' => 'Item'
);
}
当通过 Draw
的 Items
GridField
添加项目时,我需要定义一个值以在 Item::getCMSFields()
这里有一些好的建议:https://www.silverstripe.org/community/forums/data-model-questions/show/21517?start=7
您可以直接使用 GridField
的 GridFieldDetailForm
组件,并相应地设置字段。
对我有用的代码是:
$config = GridFieldConfig_RecordEditor::create();
if($this->exists()) {
// Ensure that fields are generated with knowledge of the parent
$editComponent = $config->getComponentByType('GridFieldDetailForm');
$item = new Item();
$item->DrawID = $this->ID;
$editComponent->setFields($item->getCMSFields());
}
$items = new GridField('Items', 'Items', $this->Items(), $config);
$fields->addFieldToTab('Root.Main', $items);
然后您可以从 Item::getCMSFields()
Draw::get()->byID($this->DrawID)