多模块开启多主题布局问题

经过不断的尝试和搜索,分享一下多模块多主题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’在多模块多主题情况下不会解析成功。