我想创建一个银色条纹后端界面,它为CMS用户提供了在Silverstripe3中选择一组Post类型(如tumblr)的选项。因此,他们可以选择创建新闻帖子,视频帖子,图片库帖子等。Silverstripe tumblr-like帖子类型
我最初开始给每个类型提供必要的字段并添加一个允许用户选择帖子类型的枚举字段。然后,我使用forTemplate方法来设置模板,取决于所选择的Post Type。
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将show.Then我想能够调用类似
public function PostList() {
Posts::get()
}
,并能够输出按日期排序的所有PostTypes。
有谁知道这可能是如何完成的?谢谢。
感谢MillyMonster。我看看这一切,并让我知道如果我有任何问题。感谢您及时的回复。 –
没问题。希望它有帮助。 – MillyMonster
就像跟进一样,最终为我的情况工作的是检查$ this-> Type(它对应于列出每个帖子类型的枚举字段的值)并显示网格字段选项卡或按名称删除字段哪种类型被选中。由于所有帖子类型仍然是“发布”,因此我可以在模板中使用Post :: get()来获取所有帖子。 –