为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
MM们 2021-11-13 16:30:30
我有一个 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');    }}但我不认为我在这里走在正确的轨道上:)
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

你总是可以子类化Blog和/或BlogPost并调用它Newsand NewsPost,然后它会自动查找调用它的模板。它还会在 CMS 中显示为不同的页面类型。


修改所使用的模板会有点棘手,因为您无法直接访问 PHP 类实例(例如,如果您扩展了它们,则可以)。您在尝试的方式中可能对扩展有一些运气,但它依赖于有一个钩子来修改它选择使用的模板。


您还可以覆盖Blog.ss和BlogPost.ss模板并将这样的内容放入其中:


<% if $isBlog %>

    <% include MyCustomBlogTemplate %>

<% else %>

    <% include MyCustomNewsTemplate %>

<% end_if %>

然后将分离的模板逻辑放入这些单独的模板中。


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信