我正在寻找一个DataObject类,它将字段注入到Page对象中,但我在这方面遇到了一些麻烦。到目前为止,我发现的唯一解决方案要求我在页面内做一些事情(除了在两个类之间添加关系之外),我并不是那么肯定。我做错了什么......
我需要DataObject在Page中添加一个选项卡和一些字段,并将该页面的数据保存到DataObjects表中。
从某种意义上说,我希望他们在某种程度上相互独立,以便我可以将其链接到文章,然后再将其他页面类型链接到以后。
这是我到目前为止所做的:
Article.php
malloc()
DataObject
class Article extends Page {
private static $description = 'An article page for writing and posting content';
private static $has_many = array(
'MyExtraFields' => 'MyExtraFields'
);
}
答案 0 :(得分:1)
如果我理解正确,您希望能够将DataObject MyExtraField添加到Pagetype Article。如果MyExtraField依赖于Article,那么你需要将ExtraField的关系更改为has_one,如jberculo所说:
class MyExtraField extends DataObject {
...
private static $has_one = array(
'Article' => 'Article'
);
}
然后你必须在文章的CMS视图中添加一个GridField来管理DataObject:
class Article extends Page {
...
private static $has_many = array(
'MyExtraFields' => 'MyExtraField'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$gridFieldConfig = GridFieldConfig_RecordEditor::create();
$gridfield = new GridField( "MyExtraFields", "MyExtraField", $this->MyExtraField(), $gridFieldConfig );
$fields->addFieldToTab( 'Root.ExtraFields', $gridfield );
return $fields;
}
如果要在不同的文章中重用DataObject,则需要使用多对多关系和不同的GridField-Configuration:
$gridFieldConfig = GridFieldConfig_RelationEditor::create();
您可以在此处找到GridField的文档:
https://docs.silverstripe.org/en/3.4/developer_guides/forms/field_types/gridfield
如果您想管理has_one关系以便只能添加一个MyExtraField的可选实例,您可以使用: