【发布时间】:2010-12-28 16:25:42
【问题描述】:
如果我的整个站点都使用在apps/view/layouts/default.ctp 中指定的default.ctp 布局,我如何仅将主页布局更改为使用homepage.ctp 而让站点的其余部分使用默认值。 ctp?
【问题讨论】:
如果我的整个站点都使用在apps/view/layouts/default.ctp 中指定的default.ctp 布局,我如何仅将主页布局更改为使用homepage.ctp 而让站点的其余部分使用默认值。 ctp?
【问题讨论】:
将/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
上面的答案现在已经过时了,但给出了正确的方法。
在现代版本的 CakePHP 中,他要求您制作的控制器已经存在并且是:
/app/Controller/PagesController.php
我有一个名为“loggedoff”的模板,并将其添加如下,就在$this->render() 命令之前(大约第 73 行)。
$this->layout = 'loggedoff';
【讨论】:
这很好用:
class RegistrationsController extends AppController {
public $helpers = array('Html', 'Form', 'Time');
public $components = array('Session');
public function login() {
$this->layout = 'empty';
}
}
只需在控制器函数中设置所需的布局即可。
【讨论】: