【问题标题】:silverstripe: use another "root" - template instead of "Page.ss"silverstripe:使用另一个“根” - 模板而不是“Page.ss”
【发布时间】:2021-08-11 00:43:01
【问题描述】:

是否可以为某些特定页面/控制器呈现另一个“根”模板而不是 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 有一些约定可以自动执行此操作 :)

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

【问题讨论】:

  • 您不打算将这个index 函数留在IntranetPageController 中,然后将每个新控制器定义为class NewIntranetPageController extends IntranetPageController 吗?这意味着它是一次性编写的,扩展它的页面将自动使用它

标签: php silverstripe silverstripe-4


【解决方案1】:

不要扩展PageController,而是在新控制器中扩展您的IntranetPageController。每当调用index 时,它都会从您的父类调用您的索引函数,在您的情况下为IntranetPageController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2020-11-15
    • 2020-10-31
    相关资源
    最近更新 更多