配置了module,layout的疑问

配置了三个module(module1,module2,module3)后,这个三个module下分别有三个layout.

同时在protected目录下,有一个layout文件夹,

我的想法是,举个例子来说,

当程序运行到module1后,要渲染layout时,先到module1.views.layout下寻找指定layout,

如果没有找到,就继续到protected.views.layouts下去寻找layout.

这样子,module1和module2和module3公用的layout就可以放到protected.views.layouts路径下,只需要维护一个layout,不用维护多个layout!

不知道框架是否存在这个问题,还是这问题已经解决了,更新的版本低了(注:前天才更新的svn)

现在的做法是这样的:

  1. 如果CWebModule.layout没设置,那么该module下的所有view都将采用application的layout。

  2. 如果CWebModule.layout,或CController.layout设置了,那么layout将在module1.views.layout下搜索。

这和你想要的有所差别。你可以通过改写CController::getLayoutFile()来实现你想要的方式。

我在控制器配置layout使用下面的方式解决问题

$this->layout = 'main'

修改为

$this->layout = 'application.views.layouts.main';

解决了此问题

但是相同的设置在module中配置的layout就不起作用!

这是一个bug,已经在svn里fix了。

每个控制器都要设置layout路径?有没有什么地方统一设置?

我在controller里面设置了$this->layout = 'application.modules.mgt.views.layouts.main';

则可以指向module的layout。我这样做科学吗?

你只需用'main'就可以指向module的layout了。如果不设置(缺省null),那么是指向application的缺省layout.

Quote

你只需用'main'就可以指向module的layout了。如果不设置(缺省null),那么是指向application的缺省layout.

我也在看Module, layout, theme,

我试了使用, themes/classic/views/modulename/controllername/action.php

不成功,

如果要给module使用theme的话应该如何处理的呢?

我刚测试过没问题的。

你设置theme了没有?你的action view的路径是对的。

Quote

我刚测试过没问题的。

你设置theme了没有?你的action view的路径是对的。

那我再看看配置文件和路径。

BTW, 老大, 你的回答太迅速了!I 服 U  ;D

晕,是我文件名打错了一个字母,修改后工作正常。

同时,我推荐大家使用theme,可以很好的支持module和layout,并且可以让所有的view files在同一目录下,非常方便以后更新和开发新主题。