在Yii应用程序中,我使用自己的主题(demirTheme)有模块(零售,公司)和布局(main,layout_retail,layout_corporate) )。
当渲染一个页面(ex index)时,我希望我的应用程序呈现页面,相关布局(零售与企业),然后相应地为主。我怎样才能做到这一点?
我阅读布局教程和问题没有帮助。他们只提到了改变布局路径,设置模块的默认布局等等。
我试过
有什么办法吗?你做过像这样的布局渲染吗?欢迎任何建议。
答案 0 :(得分:2)
在要应用布局的控制器中添加public $layout='//layouts/layout_retail';
(例如,在零售模块中的每个控制器中)。视图应位于" protected / view / layouts"
http://www.yiiframework.com/doc/api/1.1/CController#layout-detail
我也相信你可以把布局放在模块地图中。但是我使用上面的方法来管理我们的模块。
http://www.yiiframework.com/doc/api/1.1/CWebModule#layout-detail
编辑:
零售或公司布局应该像下面的代码一样。所以零售或公司布局将在主要布局内。显然它应该包含更多内容,但是布局的内容应该在$this->beginContent('//layouts/main');
和$this->endContent();
<?php $this->beginContent('//layouts/main'); ?> //main
<div id="content">
<?php echo $content; ?> //viewOfRetail
</div>
<?php $this->endContent(); ?>
答案 1 :(得分:0)
对于新手:在互联网的许多帮助论坛中,当有人询问主题模块时,每个人都建议使用主题文件夹的路径别名,我不同意其他论坛。我认为这是错误的,因为它意味着模块被拆分,模块应该是一个可以跨项目使用的黑盒子。只有在几个模块之间共享主题时,此类论坛中提供的建议才有效。如果有人想要&#34;打包&#34;一个模块内的主题,她可以: - 向模块的控制器添加init函数 -inide init,使用类属性布局和路径别名,像这样,使用一个id为&#34; Sample&#34;的模块: 然后你添加到SampleController.php:
public function init() {
//BELOW: it will use the layouts/main.php inside the module.
$this->layouts = "sample.views.layouts.main";
}
哟可以在这里查看路径别名: http://www.yiiframework.com/doc/guide/1.1/en/basics.namespace