我正在处理Silverstripe框架,我遇到了一个奇怪的错误。
比如说我想创建一个新的'会员'页面。在mysite / code中,我建立了一个membership.php页面,如下所示:
class Membership extends Page {
}
class Membership_Controller extends Page_Controller {
}
然后我在templates / layout文件夹中创建了一个members.ss文件,其中包含一些测试输出。然后我做一个开发构建并在CMS中创建一个类型为'membership'的页面。在前端如果我点击导航栏成员资格的新页面,我没有看到测试文本,所以似乎没有读取模板?
有什么想法吗?
感谢。
艾伦。
答案 0 :(得分:4)
关于模板有几个常见的陷阱:
在过去的版本中,冲洗工作如何变化多次 我不会在这里解释细节,因为这些细节很快就会有所改变 但是,当前版本(3.1)中有两件事与此相关:
(dev build不使用模板,因此没有刷新模板执行)
这意味着您在 dev / build
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还提供调试选项以查看使用的模板。 你可以通过两种方式激活它:
在您的yml配置中设置source_file_comments
:
SSViewer:
# display template filenames as comments in the html output
source_file_comments: true
使用“URL Variable Tools”:在浏览网站时添加?showtemplate = 1
启用时,请参阅页面的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的人!