0

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 を出力できます。

これがどのように達成されるか知っている人はいますか?ありがとう。

4

1 に答える 1

0

最初の部分は JavaScript を使用して実現できます。このチュートリアルを確認してください。質問がある場合は、ドキュメントを参照してください。

2 番目の部分はよりトリッキーになりますが、ページ コントローラーで何かできると思います。列挙値に基づいて別のテンプレートを出力するメソッドを含めますが、どこかにリンクを設定する必要があります。

多数の DataObjects があり、すべてが 1 つのページに含まれていたため、2.4.7 の DataObjectManager でこれを管理しましたが、SS3 で実現可能かどうかはわかりません。

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

このコード行は、別のテンプレートを使用してページを出力します。これをメソッドに含めて、適切なリンクがクリックされたときにそのメソッドを呼び出す必要があります。

于 2012-10-26T12:18:57.167 に答える