我有一个 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 %>
然后将分离的模板逻辑放入这些单独的模板中。
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消