Silverstripe模板问题

时间:2014-02-17 11:22:59

标签: templates content-management-system silverstripe

我正在处理Silverstripe框架,我遇到了一个奇怪的错误。

比如说我想创建一个新的'会员'页面。在mysite / code中,我建立了一个membership.php页面,如下所示:

class Membership extends Page {

}

class Membership_Controller extends Page_Controller {

}

然后我在templates / layout文件夹中创建了一个members.ss文件,其中包含一些测试输出。然后我做一个开发构建并在CMS中创建一个类型为'membership'的页面。在前端如果我点击导航栏成员资格的新页面,我没有看到测试文本,所以似乎没有读取模板?

有什么想法吗?

感谢。

艾伦。

3 个答案:

答案 0 :(得分:4)

关于模板有几个常见的陷阱:

  • 在过去的版本中,冲洗工作如何变化多次 我不会在这里解释细节,因为这些细节很快就会有所改变 但是,当前版本(3.1)中有两件事与此相关:

    1. / dev / build根本不会刷新
    2. / dev / build?flush = 1只清除清单和配置(无模板)
    3. (dev build不使用模板,因此没有刷新模板执行)
      这意味着您在 dev / build

      上执行了执行?flush = 1 而不仅仅 LI>
    4. 模板文件的名称必须与类完全相同(我认为它区分大小写)
    5. 检查模板文件是否未被其他位置的其他模板文件覆盖。 (例如,如果你有moduleName / templates / Foo.ss和themes / simple / templates / Foo.ss,那么主题的模板将覆盖模块模板
    6. 确保模板不为空(这会导致SilverStripe出错,至少在版本3.1中)
    7. Controller上的操作可以覆盖模板消息。这里有一些例子:

      // this will not use a template at all, it will just print "some string"
      public function index() { return "some string"; } 
      
      // this will not use a template at all, it will output an empty string
      public function index() { return; } 
      
      // this will use template named "Bar.ss"
      public function index() { return $this->renderWith(array('Bar')); } 
      

SilverStripe还提供调试选项以查看使用的模板。 你可以通过两种方式激活它:

  1. 在您的yml配置中设置source_file_comments

    SSViewer:
      # display template filenames as comments in the html output
      source_file_comments: true
    
  2. 使用“URL Variable Tools”:在浏览网站时添加?showtemplate = 1

  3. 启用时,请参阅页面的HTML源代码(Firefox中的CTRL + u) silverstripe将添加注释以告知您使用的模板。

答案 1 :(得分:1)

确保您的班级已声明并正确命名Page_Controller个扩展名。我最近有这个问题。页面控制器扩展名有拼写错误,因此未使用模板文件。

例如,如果您的页面类是RidiculouslyNamedPage

class RidiculouslyNamedPage extends Page {

}

class RidiculouslyNamedPage_Controller extends Page_Controller {

}

然后在themes/[theme-name]/templates/Layout/文件夹中,您将拥有RidiculouslyNamedPage.ss

如果你拼错了RidiculouslyNamedPage_Controller,模板就不会被调用。

答案 2 :(得分:-2)

我找到了问题的答案。

我的.php缺少以下内容:

function getInfo() {
return $this->renderWith('Media');
}

如果没有这个,Media.ss文件将不会被使用!希望这将有助于其他可能正在掌握SS的人!