Module里的layout

是不是在main.php配置文件里一旦设置了Module的layout属性,就无法使用application下的layout了?

比如我设置了




'layout'=>'main',//-----1处

'modules'=>array(

        'blog'=>array(

			'layout'=>'main',//------2处

		),

    ),



如果我blogModule下没有main Layout,它就不会去找application下main Layout了。

是不是应该这样子,在blogModule里,

如果没有设置 2处 的layout,则根据 1处 的layout查找blogModule下的layout,若文件不存在,再查找application下的layout。

如果设置了 2处 的layout,则根据 2处 的layout查找blogModule下的layout,若文件不存在,再查找application下的layout。

反正就是优先module下的layout,若不存在,再调用application下的layout

你的1处就是app的layout吧

另外文件存在的话你再设置layout的文件名吧,你给layout里配置一个不存在的文件,Yii用is_file判断文件不存在已经是最后一步了,直接返回false了,不会再有处理了

只要你不把layout显示的设置为false, Yii会逐级往上搜索layout的,直到app对象

楼上的意思我明白。

但就如我1楼贴的代码,已经为app和blogModule设置了默认的layout了。现在想要在blogModule里调用app里main1的layout文件,就麻烦了,不是吗?

先要设置当前Controller里的layout为null(此项默认),再设置blogModule里的layout为null,最后再设置Yii::app()->layout=‘main1’,才能搞定。

所以是不是应该有个优先机制,自动查找当前module下的layout,再查找app下的layout。都不存在,再返回false.

模块的layout貌似没有优先机制,模块中定义的layout如果不存在,它也并不会去搜索上级的layout;

主题的layout和默认的layout是有优先机制。

Yii 的layout好乱。

    'layout'=>'adminLayout',


'modules'=>array(


	'auth'=>array('layout'=>'admin'),


),

在main.php中配置了。

在modules输出

echo $this->layout.’<br/>’;

echo Yii::app()->layout;

this->layout //layouts/column1

app adminLayout

全部都到 protected/view/layouts 里边寻找的。

楼主的意思是想要在app和module都使用同一个布局了。

我的想法是让app,和module的controller继承同一个controller,在这个父controller中去设定总体的布局。

(这想法还没来得及试过…不知是否可行…)。


layout 主要是依赖controller而存在的。找准当前的controlle,再通过继承contoller等方式,解决实际应用中的问题

配置没用的,controller默认去使用 layouts/column1;要在当前controller设置layout=null;在main.php配置的layout才会生效