Silverstripe 4和命名空间 - 模板在哪里?

时间:2018-02-28 03:35:21

标签: silverstripe-4

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

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

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

upgrade doc中有一些非常简短的讨论会进入模板,但很少。我花了一天时间试图通过不完整的陈述找到关于文档可能含义的教程:

  

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

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

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

编辑:不起作用的示例:

  • Page.php - 没有命名空间
  • HomePage.php - 命名空间Vendor \ MyProject

我在my / 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'

1 个答案:

答案 0 :(得分:1)

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

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

模板

  • Page.ss:全球网站结构包括。头部和身体标签
  • 布局
    • Page.ss:Page.php的布局
    • Header.ss
    • ...
  • 供应商:我的项目名称
    • 包含:包含在其他模板中的内容
    • PageGallery.ss:通过<%include Vendor / PageGallery%>
    • 包含在内
    • 页数:供应商\页面命名空间
    • 布局
    • FooPage.ss:for Vendor \ Pages \ FooPage类,用于全局模板中的$ Layout
第一次尝试TBH是很多WTF和反复试验