yii 如何在一个控制器里给不同的action使用不同的布局

通常,我们在一个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 可以改成你想用用的文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值