首页 > 解决方案 > 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. index为每个新控制器编写完全相同的功能(稍作调整以加载另一个 LayoutPage)感觉很奇怪。

我敢肯定,Silverstripe 有一些约定可以自动执行此操作:)

我需要的是非常接近每页有一个单独的主题,但我不确定这是否可能......

标签: phpsilverstripesilverstripe-4

解决方案


而不是扩展PageController,扩展你IntranetPageController的新控制器。无论何时index调用,它都会从您的父类调用您的索引函数,在您的情况下IntranetPageController


推荐阅读