Php 基于条件的Silverstripe博客渲染到模板
我有一个silverstripe博客,我在站点的几个不同区域使用它,并希望为每个区域使用不同的模板(而不是尝试在模板中使用大量条件)…我无法获得要渲染的模板-以下是最基本的内容:Php 基于条件的Silverstripe博客渲染到模板,php,silverstripe,silverstripe-4,Php,Silverstripe,Silverstripe 4,我有一个silverstripe博客,我在站点的几个不同区域使用它,并希望为每个区域使用不同的模板(而不是尝试在模板中使用大量条件)…我无法获得要渲染的模板-以下是最基本的内容: class BlogExtension extends DataExtension { private static $db = [ 'BlogType' => 'Varchar' ]; } class BlogPostExtension exte
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中呈现每种blogpost类型:
class BlogPostControllerExtension extends DataExtension
{
public function onBeforeInit() {
//render with custom template
if ($this->owner->isBlog()) {
return $this->owner->renderWith(BlogPost::class .'_blog');
}
}
但我认为我的思路不太正确:)您可以将
Blog
和/或BlogPost
子类化,并将其命名为News
和NewsPost
,然后自动查找名为该类的模板。它也会以不同的页面类型出现在CMS中
修改使用的模板会有点棘手,因为您没有直接访问PHP类实例的权限(例如,如果您扩展了它们,您会)。您可能在尝试扩展的方式上有一些运气,但它依赖于有一个钩子来修改它选择使用的模板
您还可以覆盖Blog.ss
和BlogPost.ss
模板,并将类似的内容放入其中:
<% if $isBlog %>
<% include MyCustomBlogTemplate %>
<% else %>
<% include MyCustomNewsTemplate %>
<% end_if %>
然后将您的独立模板逻辑放入这些单独的模板中。是的,我已经考虑过了-但这将意味着要进行更多的返工,并更改现有内容/db记录等…因此我希望找到一些我可以更改模板的东西…使用基于模板的示例进行更新