我想創建一個銀色條紋後端界面,它爲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()來獲取所有帖子。 –