2012-10-26 58 views
0

我想创建一个银色条纹后端界面,它为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。

有谁知道这可能是如何完成的?谢谢。

回答

0

那么第一部分可以使用JavaScript来完成。退房this tutorial the docs让我知道你是否有任何问题。

第二部分会更棘手,但我认为你可以做一些与页面控制器。包括一个基于枚举值输出不同模板的方法,但您必须在某处设置链接。

我在2.4.7中使用DataObjectManager管理了这一点,因为我有很多数据对象,并且都包含在一个页面中,但我不确定这在SS3中是否可行。

return $this->renderWith(array('CustomTemplate')); 

这行代码将使用不同的模板输出页面。您需要将其包含在方法中,然后在单击相应的链接时调用该方法。

+0

感谢MillyMonster。我看看这一切,并让我知道如果我有任何问题。感谢您及时的回复。 –

+0

没问题。希望它有帮助。 – MillyMonster

+1

就像跟进一样,最终为我的情况工作的是检查$ this-> Type(它对应于列出每个帖子类型的枚举字段的值)并显示网格字段选项卡或按名称删除字段哪种类型被选中。由于所有帖子类型仍然是“发布”,因此我可以在模板中使用Post :: get()来获取所有帖子。 –

相关问题