【问题标题】:Silverstripe 3: How to load a custom layout in a page template using a controller?Silverstripe 3:如何使用控制器在页面模板中加载自定义布局?
【发布时间】:2014-11-10 15:28:55
【问题描述】:

早上好,

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

[目录布局]
--root
---|主题
-----|自定义主题
--------|模板
----------Page.ss
---|我的模块
-----|模板
--------|布局
----------CustomLayout.ss
-----|代码
--------|控制器
----------MyController.php

注意:路由工作正常,所以我将忽略它。有关 MyController.php、Page.ss 和 CustomLayout.ss,请参见下面的 sn-p

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->render($data);'之前的声明并从 Page.ss 调用它并且它有效。我似乎无法使用控制器加载 CustomLayout。

感谢您的帮助。

【问题讨论】:

    标签: templates layout controller silverstripe


    【解决方案1】:

    好的,SilverStripe 有一些很奇怪的地方,我不明白。 在发布此问题之前,我一直在清除缓存进行完全重建等(/dev/build?flush=1),但没有任何效果。

    所以,我决定尝试 ?debug_request=1。什么都没有显示。
    查看文档后,我看到 isDev=1,打开开发模式。
    所以,我做了这样的调试请求:
    [url]?isDev=1&debug_request=1。我收到一个警告,提示“strtotime”抱怨 php 中的“date.timezone”。所以,我在我的 php.ini 文件中修复了它并重新启动了 apache 服务器。

    重启后,当我重新访问我的控制器时,一切正常。因此,代码没有任何问题。这是另外一回事,我不明白。

    感谢所有研究此问题的人。
    如果有人对此有解释,请发布。
    谢谢。

    【讨论】:

    • PHP 5.3+ 要求设置日期时区。在 php.ini 文件中设置它是正确的方法,尽管您可以通过 htaccess 为单个目录设置它:php_value date.timezone America/New_York
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多