在Yii中使用多个模块的通用布局

时间:2012-10-14 11:27:13

标签: layout module yii

我在我的网站项目中使用Yii框架。现在,我有几个模块,我想只为所有模块使用一个布局。我使用以下代码来确定每个模块中每个控制器/操作的布局:

$this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
$this->layout = '//layouts/myLayout';

通过在每个模块的init()函数中使用相同的代码,还有其他解决方案吗? 换句话说,我必须在每个动作中编写上面的2行代码,我认为它不好,我想减少我的代码行数。例如如下:

class StaffModule extends CWebModule
{
    public $layout;
    public $layoutPath;
    public function init()
    {
        $this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
                $this->layout = '//layouts/myLayout';
        $this->setImport(array(
            'staff.models.*',
            'staff.components.*',
        ));
    }
}

但它不起作用。请帮帮我。

3 个答案:

答案 0 :(得分:2)

只需使用

  

$这 - >布局= '//布局/ myLayout';

没有

  

$ this-> layoutPath = Yii :: getPathOfAlias('application.views.layouts');

因为//表示你从根

的特定绝对路径

答案 1 :(得分:0)

你在init函数中使用的方法是正确的方向..我认为问题可能是..因为你定义layoutPath你不应该//layouts..

$this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
$this->layout = 'myLayout';

你不需要这些:

public $layout;
public $layoutPath;

答案 2 :(得分:0)

我在

上回答了类似的问题

using common layout for several modules

解决方案是在模块中的beforeControllerAction上设置布局。 它应该工作。