2

我正在将 3.x 站点升级到 4.x。一切看起来都很好,今天早上我可以在升级核心框架和其他模块后真正加载我的网站。

我刚刚完成了此处的升级过程,并完成了在 /mysite.xml 中命名所有自定义文件的部分。除了 Page.php 和 PageController.php 之外,我已经完成了。

我遇到的问题是自从执行此命名空间以来,没有页面可以在系统中找到任何模板。所有页面都使用 /framework/templates/SilverStripe/Control/Controller.ss(由源代码中的标记确认)。

升级文档中有一些关于模板的非常简短的讨论,但很少。而且我花了一天的时间试图找到有关文档不完整声明可能意味着什么的教程:

核心模板位置已移动 - 如果您包含或覆盖这些(例如 FormField 模板),请调整到新路径。

(它不完整,因为它没有继续说明“新路径”实际上是什么。)

如果你有一个文件 /mysite/code/Page.php (没有命名空间),你会期望 /mysite/template/Page.ss 中的模板加载吗?在我的情况下,它没有。如果您有另一个名为 HomePage 的页面扩展了 Page.php,但有命名空间 Vendor\MySection,您希望在文件系统中的哪里找到模板?

编辑:不起作用的示例:

  • Page.php - 没有命名空间
  • HomePage.php - 命名空间供应商\MyProject

我在 /themes/[themename]/templates 目录和 /mysite/templates 目录中都尝试了以下结构:

Page.ss
Vendor
   MyProject
      Layouts
         HomePage.ss

在任何一种情况下,都不会选择 Page.ss 模板或 HomePage.ss 模板。该页面由 Controller.ss 呈现。

我让它工作的唯一方法是从所有页面中删除命名空间并遵循通常在 SS3 中找到的结构。

编辑 2:只是我的 config.yml 的内容

SilverStripe\View\SSViewer:
  themes:
    - 'mytheme'
    - '$default'
4

1 回答 1

2

模板也应该是“命名空间的”;

我最新的 SS4 项目中的模板目录看起来像

模板

  • Page.ss:全球网站结构,包括。头部和身体标签
  • 布局
    • Page.ss:Page.php 的 $Layout
  • 包括
    • 头文件.ss
    • ...
  • 供应商:我的项目名称
    • 包括:包含在其他模板中的东西
    • PageGallery.ss:通过 <% include Vendor/PageGallery %> 包含在内
    • 页面:对于 Vendor\Pages 命名空间
    • 布局
    • FooPage.ss:用于 Vendor\Pages\FooPage 类,用于全局模板中的 $Layout

TBH 第一次尝试是很多 WTF 和反复试验

于 2018-02-28T07:11:53.853 回答