在cakephp中仅更改主页布局

在cakephp中仅更改主页布局,php,cakephp,layout,Php,Cakephp,Layout,如果我的整个网站使用apps/view/layouts/default.ctp中指定的default.ctp布局,如何仅将主页布局更改为使用homepage.ctp,并使用default.ctp保留网站的其余部分?将/cake/libs/controller/pages\u controller.php复制到/app/controller/目录中,然后执行以下任一操作: 在display()的末尾添加一行,以便在请求“home”时切换布局: if($page='home')$this->lay

如果我的整个网站使用apps/view/layouts/default.ctp中指定的default.ctp布局,如何仅将主页布局更改为使用homepage.ctp,并使用default.ctp保留网站的其余部分?

/cake/libs/controller/pages\u controller.php
复制到
/app/controller/
目录中,然后执行以下任一操作:

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

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

上述答案现已过时,但给出了正确的方法

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

/app/Controller/PagesController.php
我有一个名为“loggedoff”的模板,并在
$this->render()
命令(大约第73行)之前添加了如下内容

这很好:

class RegistrationsController extends AppController {
     public $helpers = array('Html', 'Form', 'Time');
     public $components = array('Session');

     public function login() {
         $this->layout = 'empty';
     } 
}

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

覆盖类并没有变得更聪明一点。我还猜想可以从其他函数调用
$this->layout
,比如
init
。实际上,您甚至不需要原始的
PagesController
-您可以使用路由指向自定义控制器并从中设置
$this->layout
there@Franz“覆盖”是什么意思?@K当然可以,但是按照惯例,只保留静态页面的PagesController是个好主意。很酷,我只是利用第一点实现了这一点。尽管我也注意到另一位同事编写的自定义cms覆盖了此设置。所以基本上我只需要通过cms为主页指定一个模板。当我不使用cms时,我一定会使用这个。谢谢你们的帮助。
class RegistrationsController extends AppController {
     public $helpers = array('Html', 'Form', 'Time');
     public $components = array('Session');

     public function login() {
         $this->layout = 'empty';
     } 
}