在silverstripe指南中添加many_many关系非常类似于指导关系的项目:
http://doc.silverstripe.org/framework/en/tutorials/5-dataobject-relationship-management
我想记录一个反对这种关系的属性.所以例如"活跃" - 项目导师的是/否字段.但是导师可能对她所涉及的不同项目有不同的积极价值.
什么是使用Silverstripe内置工具实现这一目标的最佳方式?
在IRC的帮助和以下答案的更新.我已经离得更近了一点,有点不能正常工作.我发现了这个:https: //github.com/chillu/silverstripe-framework/blob/c8136f5d4c8a37a4da274cd1c93907c0a2af86a7/docs/en/reference/grid-field.md 这似乎非常相关.
所以DebatePages有许多小组成员,他们可以在每次辩论中投票不同.
DebatePage.php
private static $many_many = array(
'Panelists' => 'Panelist',
'RelationTags' => 'Tag'
);
public static $many_many_extraFields = array(
'Panelists' => array('Motion' => 'Boolean')
);
public function getCMSFields() {
.....
if($this->ID) {
$panelistFields = singleton('Panelist')->getCMSFields();
$panelistFields->addFieldToTab(
'Root.Main',
// Please follow the "ManyMany[<extradata-name>]" convention
new TextField('ManyMany[Motion]', 'Agree with Motion')
);
$config = GridFieldConfig_RelationEditor::create();
$config->getComponentByType('GridFieldDetailForm')->setFields($panelistFields);
$gridField = new GridField('Panelists', 'Panelists', $this->Panelists(), $config);
$fields->findOrMakeTab('Root.Panelists')->replaceField('Panelist', $gridField);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以$many_many_extraFields在$many_many关系上使用,就像这样(我猜这是Project类):
static $many_many = array(
'Mentors' => 'Mentor'
);
static $many_many_extraFields = array(
'Mentors' => array(
'Active' => 'Boolean'
)
);
Run Code Online (Sandbox Code Playgroud)
然后,对于每个项目,特定的导师可以是活动的(您可以随时添加除'Active'... 之外的其他字段).
如果您使用的SS 3.1你可以通过轻松编辑这些额外的领域GridField与GridFieldDetailForm组件:
function getCMSFields(){
--[snip]--
$detailFormFields = new FieldList();
$detailFormFields->push( new CheckBoxField(
'ManyMany[Active]',
'Is Mentor active?'
));
$detailFormFields->push( new TextField(
'SomeOtherField',
'Some other title'
));
$config = new GridFieldConfig_RelationEditor();
$config->getComponentByType('GridFieldDetailForm')->setFields($detailFormFields);
$f = new GridField('Mentors', 'Mentors', $this->Mentors(), $config);
//push() or addFieldToTab() $f to CMSFields
--[snip]--
}
Run Code Online (Sandbox Code Playgroud)
关于此的文档在这里:http://doc.silverstripe.com/framework/en/3.1/reference/grid-field#customizing-detail-forms
在检索代码中的数据时,可以使用上面的getExtraData($componentName, $itemID)方法ManyManyList来检索那些额外的字段值:http:
//api.silverstripe.org/3.1/source-class-ManyManyList.html#178-210
| 归档时间: |
|
| 查看次数: |
3523 次 |
| 最近记录: |