php - 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');
}
}
但我不认为我在这里完全走在正确的轨道上:)
解决方案
你总是可以继承Blog
和/或BlogPost
调用它News
and NewsPost
,然后它会自动查找调用它的模板。它还会在 CMS 中显示为不同的页面类型。
修改使用的模板会有点棘手,因为您没有直接访问 PHP 类实例的权限(例如,如果您扩展了它们,您会这样做)。您可能对尝试的扩展有一些运气,但它依赖于有一个钩子来修改它选择使用的模板。
您还可以覆盖Blog.ss
andBlogPost.ss
模板并将类似的内容放入其中:
<% if $isBlog %>
<% include MyCustomBlogTemplate %>
<% else %>
<% include MyCustomNewsTemplate %>
<% end_if %>
然后将您分离的模板逻辑放入这些单独的模板中。
推荐阅读
- node.js - 使用 simple-peer 重新加载页面后没有视频播放
- gnuplot - `columnhead(N)` 和 `columnheader(N)` 有什么区别?
- kubernetes - 为什么无法在 kubernetes 集群中使用 $(service name).$(namespace).svc.cluster.local ping statefulset
- mysql - 通过在 MYSQL 中发送电子邮件和代码来恢复忘记的密码
- github - 使用 http 代理连接 github 失败
- python - Altair:如何更改分组条形图中列标题的字体大小?
- linux - linux elf .bss 部分内存成本
- python-3.x - Azure Functions Http 在收到 pdf 文件时触发,然后使用 Form Recognizer [python] 分析表单
- python - 如何在没有理解的情况下填写字典
- spring-boot - 在 thymeleaf 中设置 th:field 属性正在替换 name 属性