【发布时间】:2016-09-08 13:55:55
【问题描述】:
我正在寻找一个 DataObject 类,它将字段注入到 Page 对象中,但这样做有点麻烦。到目前为止,我发现的唯一解决方案需要我在页面中做一些事情(除了添加两个类之间的关系),我不太确定我是什么做错了...
我需要让 DataObject 在 Page 中添加一个选项卡和一些字段,并将该 Page 的数据保存到 DataObjects 表中。
从某种意义上说,我希望它们在某种程度上彼此独立,以便我可以不时将其链接到 文章,然后在以后的某个时间链接到其他一些页面类型。
这是我目前所拥有的:
Article.php
class Article extends Page {
private static $description = 'An article page for writing and posting content';
private static $has_many = array(
'MyExtraFields' => 'MyExtraFields'
);
}
数据对象
class MyExtraFields extends DataObject {
private static $db = array(
'ExtraText' => 'Varchar(255)',
'ExtraWYSIWYG' => 'HTMLText'
);
private static $has_many = array(
'Article' => 'Article'
);
private static $summary_fields = array(
'ExtraText' => 'ExtraText',
'ExtraWYSIWYG' => 'ExtraWYSIWYG'
);
public function updateCMSFields(){
$fields = parent::getCMSFields();
$fields->addFieldsToTab('Root.Content.Translation', array(
TextField::create('ExtraText'),
HTMLEditorField::create('ExtraWYSIWYG')
)
);
return $fields;
}
}
【问题讨论】:
-
目标到底是什么?只需向页面添加两个附加字段?如果是这种情况,直接将它们添加到页面中?如果您需要将它们应用到不同的页面,或者通过扩展。如果您希望能够将 0 - N ExtraFields 添加到页面,那基本上是一个内容块模块(为此目的有几个现有模块)
-
在ExtraFields 类中(我会将那个重命名为ExtraField,因为每个对象只包含一个),文章页面有一个has_many,它应该是一个has_one。如果你想创建一个多对多,那么你应该在一侧创建一个 many_many 关系,在另一侧创建一个 belongs_many_many (但我猜这不是你想要实现的......)
标签: silverstripe