Silverstripe3 の一連の投稿タイプ (tumblr など) から選択するオプションを CMS ユーザーに提供する、silverstripe 用のバックエンド インターフェイスを作成しようとしています。そのため、ニュース投稿、ビデオ投稿、ギャラリー投稿などの作成を選択できます。
最初に、すべての投稿に各タイプに必要なフィールドを与え、ユーザーが投稿タイプを選択できるようにする列挙型フィールドを追加することから始めました。次に、forTemplate メソッドを使用して、選択した投稿タイプに応じてテンプレートを設定しました。
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 のみが表示されます。次に、次のようなものを呼び出すことができるようにしたいと思います
public function PostList() {
Posts::get()
}
日付でソートされたすべての PostTypes を出力できます。
これがどのように達成されるか知っている人はいますか?ありがとう。