【问题标题】:Changing only the home page layout in cakephp仅更改 cakephp 中的主页布局
【发布时间】:2010-12-28 16:25:42
【问题描述】:

如果我的整个站点都使用在apps/view/layouts/default.ctp 中指定的default.ctp 布局,我如何仅将主页布局更改为使用homepage.ctp 而让站点的其余部分使用默认值。 ctp?

【问题讨论】:

    标签: php cakephp layout


    【解决方案1】:

    /cake/libs/controller/pages_controller.php 复制到您的/app/controller/ 目录并执行以下任一操作:

    • display() 的末尾添加一行以在请求“主页”时切换布局:
      if ($page == 'home') $this->layout = 'homepage';
    • 创建一个home() 方法(或任意命名),在其中设置$this->layout 并重新路由/app/config/routes.php 中的/ 路由以使用此新方法。

    编辑:
    总之,您需要一些自定义方法来设置$this->layout = 'homepage',仅此而已。您可以随时在任何控制器中执行此操作,重用 PagesController 只是在 Cake 中执行此操作的最方便和传统的方式。

    【讨论】:

    • 覆盖类不是更聪明一点。我还猜想$this->layout 可以从其他函数调用,类似于init
    • 其实,你甚至不需要原来的PagesController——你可以使用路由指向一个自定义控制器并从那里设置$this->layout
    • @Franz “覆盖”是什么意思?
    • @K 当然可以,但是按照惯例只保留静态页面的 PagesController 是个好主意。
    • 酷,我刚开始使用第一点。尽管我也注意到另一个工作人员编写的自定义 cms 覆盖了此设置。所以基本上我只需要通过 cms 为主页指定一个模板。不过,当我不使用 cms 时,我一定会使用它。谢谢你们的帮助。
    【解决方案2】:

    上面的答案现在已经过时了,但给出了正确的方法。

    在现代版本的 CakePHP 中,他要求您制作的控制器已经存在并且是:

    /app/Controller/PagesController.php
    

    我有一个名为“loggedoff”的模板,并将其添加如下,就在$this->render() 命令之前(大约第 73 行)。

    $this->layout = 'loggedoff';
    

    【讨论】:

      【解决方案3】:

      这很好用:

      class RegistrationsController extends AppController {
           public $helpers = array('Html', 'Form', 'Time');
           public $components = array('Session');
      
           public function login() {
               $this->layout = 'empty';
           } 
      }
      

      只需在控制器函数中设置所需的布局即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多