2012-10-26 87 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()來獲取所有帖子。 –

相關問題