Silverstripe 博客基于条件渲染到模板

我有一个 silverstripe 博客,我将它用于站点中的几个不同区域,并希望为每个区域使用不同的模板(而不是尝试在模板中使用大量条件)。我无法获得要渲染的模板 - 这是最基本的:


class BlogExtension extends DataExtension

{

    private static $db = [        

    'BlogType'     => 'Varchar'       

    ];

}



class BlogPostExtension extends DataExtension

{        

    public function isNews()

    {

        return $this->owner->Parent()->BlogType == 'news';

    }        


    public function isBlog()

    {

        return $this->owner->Parent()->BlogType == 'blog';

    }        

而且,我正在尝试执行以下操作,以在 BlogPost_news.ss 或 BlogPost_blog.ss 中呈现每种博客文章类型:


class BlogPostControllerExtension extends DataExtension

{


public function onBeforeInit() {

    //render with custom template

    if ($this->owner->isBlog()) {

        return $this->owner->renderWith(BlogPost::class .'_blog');

    }


}

但我不认为我在这里走在正确的轨道上:)


MM们
浏览 135回答 1
1回答

千巷猫影

你总是可以子类化Blog和/或BlogPost并调用它Newsand NewsPost,然后它会自动查找调用它的模板。它还会在 CMS 中显示为不同的页面类型。修改所使用的模板会有点棘手,因为您无法直接访问 PHP 类实例(例如,如果您扩展了它们,则可以)。您在尝试的方式中可能对扩展有一些运气,但它依赖于有一个钩子来修改它选择使用的模板。您还可以覆盖Blog.ss和BlogPost.ss模板并将这样的内容放入其中:<% if $isBlog %>&nbsp; &nbsp; <% include MyCustomBlogTemplate %><% else %>&nbsp; &nbsp; <% include MyCustomNewsTemplate %><% end_if %>然后将分离的模板逻辑放入这些单独的模板中。
打开App,查看更多内容
随时随地看视频慕课网APP