Silverstripe tumblr-like立柱类型
我正在尝试为silverstripe创建一个后端接口,让CMS用户可以在Silverstripe3中的一组Post类型(如tumblr)之间进行选择。因此,他们可以选择创建新闻帖子、视频帖子、画廊帖子等 最初,我为所有帖子提供了每种类型所需的字段,并添加了一个允许用户选择帖子类型的枚举字段。然后,我使用forTemplate方法根据选择的帖子类型设置模板Silverstripe tumblr-like立柱类型,silverstripe,Silverstripe,我正在尝试为silverstripe创建一个后端接口,让CMS用户可以在Silverstripe3中的一组Post类型(如tumblr)之间进行选择。因此,他们可以选择创建新闻帖子、视频帖子、画廊帖子等 最初,我为所有帖子提供了每种类型所需的字段,并添加了一个允许用户选择帖子类型的枚举字段。然后,我使用forTemplate方法根据选择的帖子类型设置模板 class Post extends DataObject { static $db = array( 'Title'
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;
}
}
我希望用户能够在后端选择帖子类型,并且只显示相应的选项卡。因此,如果选择“视频”,则只会显示“视频网格字段”选项卡。如果您选择照片类型,则只有照片的网格字段才会显示
public function PostList() {
Posts::get()
}
并且能够输出按日期排序的所有PostType
有人知道如何做到这一点吗?谢谢。第一部分可以使用javascript完成。如果您对此有任何疑问,请联系我 第二部分可能会比较棘手,但我认为您可以使用页面控制器做一些事情。包括一个基于枚举值输出不同模板的方法,但必须在某个位置设置链接 我在2.4.7中使用DataObjectManager管理了这一点,因为我有许多DataObject,并且都包含在一个页面中,但我不确定这在SS3中是否可行
return $this->renderWith(array('CustomTemplate'));
这行代码将使用不同的模板输出页面。您需要将其包含在方法中,然后在单击相应链接时调用该方法。谢谢MillyMonster。我看了所有这些,如果我有任何问题,请告诉你。谢谢你的快速回复,没问题。希望这会有帮助。作为后续工作,最终对我的情况有效的方法是检查$this->Type(对应于列出每个帖子类型的枚举字段的值),并根据选择的类型显示gridfield选项卡或按名称删除字段。由于所有的帖子类型仍然是“Post”,我可以在模板中使用Post::get()来获取所有帖子。另外,为了单独链接到每个帖子,我做了MillyMonster上面提到的事情。