经过不断的尝试和搜索,分享一下多模块多主题layout的设定(网上很多文章中的方法是不能用的,未经过实践的转来转去)
假设有多个模块
modules
|-- blog
|-- forum
themes
|-- red
|-- views
|-- layouts
|-- default
|-- green
|-- views
|-- layouts
|-- default
配置文件main.php:
'defaultController' => 'blog' //配置默认的模块(看起来奇怪吧)
'modules' => array(
'theme' => array(
'layout' => 'main',
'defaultController' => 'XXX',
),
'script' => array(
'layout' => 'main',
'defaultController' => 'XXX',
),
),
控制器:modules/blog/controllers/DefaultController.php
class DefaultController extends CController
{
//public $layout = 'main'; 可以在这里重写配置中的layout啦
//.......
}
注意:如果你是用gii生成的controller, 那么继承的是component下的Controller(里面有layout属性) 而不是CController,所以在main.php里的layout配置被覆了。
包含使用layout时需要注意以下问题:
column1.php 中包含 main.php 布局
<?php $this->beginContent('/layouts/main'); ?>
<div class="span-19">
<div id="content">
<?php echo $content; ?>
</div><!-- content -->
</div>
<div class="span-5 last">
<div id="sidebar">
<?php
$this->beginWidget('zii.widgets.CPortlet', array(
'title'=>'Operations',
));
$this->widget('zii.widgets.CMenu', array(
'items'=>$this->menu,
'htmlOptions'=>array('class'=>'operations'),
));
$this->endWidget();
?>
</div><!-- sidebar -->
</div>
<?php $this->endContent(); ?>
beginContent()正确参数是’/layout/main’, 而’//layout/main’ 以及’main’在多模块多主题情况下不会解析成功。