我正在尝试为 silverstripe 创建一个后端界面,让 CMS 用户可以选择在 Silverstripe3 中的一组帖子类型(如 tumblr)之间进行选择。因此他们可以选择创建新闻帖子、视频帖子、画廊帖子等。
我最初开始为所有帖子提供每种类型的必要字段,并添加一个允许用户选择帖子类型的枚举字段。然后,我使用 forTemplate 方法来设置模板,具体取决于选择的帖子类型。
class Post extends DataObject {
static $db = array(
'Title' => 'Varchar(255),
'Entry' => 'HTMLText',
'Type' => 'enum('Video, Photo, Gallery, Music')
);
static $many_many = array(
'Videos' => 'SiteVideo',
'Photos' => 'SitePhoto,
'Songs' => 'SiteMp3'
);
public function forTemplate() {
switch ($this->Type) {
case 'Video':
return $this->renderWith('VideoPost');
break;
case 'Photo':
return $this->renderWith('ImagePost');
break;
etc...
}
function getCMSFields($params=null) {
$fields = parent::getCMSFields($params);
...
$videosField = new GridField(
'Videos',
'Videos',
$this->Videos()->sort('SortOrder'),
$gridFieldConfig
);
$fields->addFieldToTab('Root.Videos', $photosField);
$photosField = new GridField(
'Photos',
'Photos',
$this->Photos()->sort('SortOrder'),
$gridFieldConfig
);
$fields->addFieldToTab('Root.Videos', $photosField);
return $fields;
}
}
我希望用户能够在后端选择帖子类型,并且只显示适当的选项卡。因此,如果您选择 Video,则只会显示 Video GridField 选项卡。如果您选择照片类型,只有照片的 GridField 会显示。那么我希望能够调用类似
public function PostList() {
Posts::get()
}
并能够输出按日期排序的所有 PostType。
有谁知道这可能是如何实现的?谢谢。