Silverstripe 博客根据条件渲染到模板
Silverstripe blog render to template based on conditional
我有一个 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');
}
}
但我不认为我在正确的轨道上:)
您总是可以子class Blog
and/or BlogPost
并将其命名为 News
和 NewsPost
,然后它们会自动查找模板也调用它。它还会在 CMS 中显示为不同的页面类型。
修改使用的模板有点棘手,因为您无法直接访问 PHP class 实例(例如,如果您扩展它们,您会).您可能会以您尝试的方式进行扩展,但它依赖于有一个钩子来修改它选择使用的模板。
您还可以重写 Blog.ss
和 BlogPost.ss
模板,然后将类似这样的内容放入其中:
<% if $isBlog %>
<% include MyCustomBlogTemplate %>
<% else %>
<% include MyCustomNewsTemplate %>
<% end_if %>
然后将您分离的模板逻辑放入那些单独的模板中。
我有一个 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');
}
}
但我不认为我在正确的轨道上:)
您总是可以子class Blog
and/or BlogPost
并将其命名为 News
和 NewsPost
,然后它们会自动查找模板也调用它。它还会在 CMS 中显示为不同的页面类型。
修改使用的模板有点棘手,因为您无法直接访问 PHP class 实例(例如,如果您扩展它们,您会).您可能会以您尝试的方式进行扩展,但它依赖于有一个钩子来修改它选择使用的模板。
您还可以重写 Blog.ss
和 BlogPost.ss
模板,然后将类似这样的内容放入其中:
<% if $isBlog %>
<% include MyCustomBlogTemplate %>
<% else %>
<% include MyCustomNewsTemplate %>
<% end_if %>
然后将您分离的模板逻辑放入那些单独的模板中。