通常,我们在一个contorller里边使用一个layout布局,那么我们只需要在contorller里边定义$layout 就好了。看官方文档:
1. 布局 ¶
布局是一种用来修饰视图的特殊的视图文件.它通常包含了用户界面中通用的一部分视图.例如:布局可以包含header和footer的部分,然后把内容嵌入其间.
......header here......
<?php echo $content; ?>
......footer here......
其中的 $content 则储存了内容视图的渲染结果.
当使用 render() 时,布局被隐式应用.视图脚本 protected/views/layouts/main.php 是默认的布局文件.这可以通过改变 CWebApplication::layout 或者 CWebApplication::layout 进行自定义。要渲染一个不带布局的视图,则需调用 renderPartial() 。
那么如何在一个控制器里给不同的action使用不同的布局呢?很简单, 如果要改变某一个action的layout,可以使用 $this->layout来指定要使用的layout。例子:
<?php
class PickGoodController extends Controller {
public $layout = '//layouts/scanGun';//这里controller默认调用的是扫描枪手持设备的试图
/**
* @return array action filters
*/
public function filters() {
return array(
'rights',
);
}
/**
* Lists all models.
*/
public function actionScan() {
$this->render('scan');//这里默认调用的是扫描枪手持设备的试图
}
public function actionPickGoods(){
$this->layout = '//layouts/column3';//这里给拣货动作赋予系统的试图
$this->render('pickgoods');
}
}
下面再补充一个小知识:
系统是默认调用模块里的layout比如说 我要调 这个 modules/admin/views/layouts/ column2.php 这个视图文件
那么在 contrllers/AdminController.php 这个 controller 文件里 要这样写
public $layout='/layouts/column2';
注意前面是 / 不是 //
如果是 // 就会默认去调 protected/views/layouts
这里就是 其实 就是 绝对和相对的关系
或者 public $layout='column2'; //column2 可以改成你想用用的文件