php - 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 有一些约定可以自动执行此操作:)
我需要的是非常接近每页有一个单独的主题,但我不确定这是否可能......
解决方案
而不是扩展PageController
,扩展你IntranetPageController
的新控制器。无论何时index
调用,它都会从您的父类调用您的索引函数,在您的情况下IntranetPageController
。
推荐阅读
- ruby-on-rails - 使用 Rails 5 升级了解 gem 的版本兼容性
- popupwindow - 如何在 conversejs 中添加按钮聊天框标题部分?
- python - 如何使用 Python Unittest 定义测试方法
- javascript - 根据three.js中的鼠标位置旋转球体x轴
- php - PHP:在特定页面上显示/隐藏 div
- python - 打印错误的变量虽然检查了变量
- php - PHP Gmail API:尝试仅收集最后 100 个线程
- c++ - 如何让我的 Arduino 停止发送混乱的 Unicode 而不是数字?
- sql - 分组到列并填充具有唯一排名行的列
- amazon-s3 - 如何使用 CloudFront 从 S3 提供静态文件