Silverstripe 3:如何使用控制器在页面模板中加载自定义布局?

时间:2014-11-10 15:28:55

标签: templates layout controller silverstripe

早上好,

这是场景:我有一个自定义模块,并希望加载特定控制器操作的布局,但似乎无法弄清楚如何。见下面的例子:

[目录布局]
  --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。

感谢您的协助。

1 个答案:

答案 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服务器。

重启后,当我重新访问我的控制器时,一切正常。所以,代码没有任何问题。这是别的,我不明白。

我对正在研究这个问题的任何人表示感谢 如果有人对此有解释,请发布。
谢谢。