早上好,
这是场景:我有一个自定义模块,并希望加载特定控制器操作的布局,但似乎无法弄清楚如何。见下面的例子:
[目录布局]
--root
--- |主题
----- | CustomTheme
------- |模板
---------- Page.ss
--- | MyModule的
----- |模板
------- |布局
---------- CustomLayout.ss
----- |代码
------- |控制器
---------- MyController.php
注意:路由工作正常,所以我会把它留下来。请参阅以下Snippet for MyController.php,Page.ss和CustomLayout.ss
class MyController extends Page_Controller{
///> ... snippet ...
public function someMethod(SS_HTTPRequest $request){
if($request){
$id = $request->param('ID');
$dObj = MyDataObject::get()->byID($id);
$title = $dObj->getTitle();
$data = array( 'ObjTitle' => $title );
//debug statement; It shows up, so I know the method is working!
echo 'someMethod called!';
return $this->customise($data)->renderWith(array('CustomLayout', 'Page'));
}//if
return $this->render();
}//someMethod
}//class MyController
///>Page.ss snippet
...
<body>
<!--
I placed the text 'Layout:' to ensure that
this template is being called, and it is!
-->
Layout: $Layout
</body>
</html>
///>CustomLayout.ss snippet
<h2> Object Title: $ObjTitle </h2>
现在,我知道$ ObjTitle正在工作,因为我使用了'$ this-&gt; render($ data);'之前的声明并从Page.ss调用它并且它起作用。我似乎无法使用控制器加载CustomLayout。
感谢您的协助。
答案 0 :(得分:1)
好的,所以我不明白SilverStripe有些奇怪的东西。 在发布此问题之前,我一直在清除完成重建等的缓存(/ dev / build?flush = 1),但没有任何效果。
所以,我决定尝试一下?debug_request = 1。什么都没有出现。
在完成文档后,我看到isDev = 1,打开开发模式。
所以,我和调试请求一起这样做了:
[url]?isDev = 1&amp; debug_request = 1。我收到警告,'strtotime'在php中抱怨'date.timezone'。所以,我在我的php.ini文件中修复了它并重新启动了apache服务器。
重启后,当我重新访问我的控制器时,一切正常。所以,代码没有任何问题。这是别的,我不明白。
我对正在研究这个问题的任何人表示感谢
如果有人对此有解释,请发布。
谢谢。