如何解决silverstripe:使用另一个“根” - 模板而不是“Page.ss”
是否可以为某些特定页面/控制器呈现另一个“根”模板而不是 Page.ss
文件?已经有一些页面使用 Page.ss
模板,但现在网站上将有一个新的“Intranet”部分,这些页面应该有另一个“根”模板:IntranetPage.ss
。
Page.ss
应该保持原样,根本不应该被触摸。
我主要想要不同的“根”模板,因为两个模板加载不同的 JS 和 CSS 文件。 “容器”HTML 也完全不同。
我能够创建一个自定义控制器,它可以手动执行我需要的操作。像这样:
class IntranetPageController extends PageController
{
public function index()
{
return $this->customise([
'Layout' => $this->renderWith(['Intranet/Layout/IntranetPageLayout'])
])->renderWith(['Intranet/IntranetPage']);
}
}
代码的灵感来自这里:https://docs.silverstripe.org/en/4/developer_guides/templates/rendering_templates/
IntranetPage.ss
现在用作“根”模板。 IntranetPageLayout.ss
显示为 $Layout
占位符。
这似乎可行,但是我有很多页面必须基于 IntranetPage.ss
。为每个新的 Controller 编写完全相同的 index
函数(稍作调整以加载另一个 LayoutPage)感觉很奇怪。
我敢肯定,Silverstripe 有一些惯例可以自动执行此操作:)
我需要的是非常接近每页有一个单独的主题,但我不确定这是否可能......
解决方法
不要扩展 PageController
,而是在新控制器中扩展您的 IntranetPageController
。每当调用 index
时,它都会从您的父类调用您的索引函数,在您的情况下为 IntranetPageController
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。