在模块内部使用布局Yii PHP

时间:2014-09-08 12:21:38

标签: php layout yii

在Yii应用程序中,我使用自己的主题(demirTheme)有模块(零售,公司)和布局(main,layout_retail,layout_corporate) )。

当渲染一个页面(ex index)时,我希望我的应用程序呈现页面,相关布局(零售与企业),然后相应地为主。我怎样才能做到这一点?

我阅读布局教程和问题没有帮助。他们只提到了改变布局路径,设置模块的默认布局等等。

我试过

  • 将所有布局放在themes layouts文件夹中,
  • 将主要布局分别放在主题布局文件夹和其他两个模块布局文件夹中的模块
  • 将所有布局放在protected / view / layouts文件夹中,
  • 将所有布局放在模块中,并为每个模块放置一个主布局副本 但是不能让它发挥作用。我尝试更改布局路径和其他设置。

有什么办法吗?你做过像这样的布局渲染吗?欢迎任何建议。

2 个答案:

答案 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