微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverstripe:使用另一个“根” - 模板而不是“Page.ss”

如何解决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 举报,一经查实,本站将立刻删除。