【问题标题】:Yii module, theme layout include module layout. How to to that?Yii 模块,主题布局包括模块布局。如何做到这一点?
【发布时间】:2013-02-02 22:09:25
【问题描述】:

我需要这样做:

我在 /themes/panel 中有主题“面板”,并在 /themes/panel/views/layouts/main.php 中有示例内容的布局

<a>$content</a>

我在 /protected/modules/admin 中有模块“admin”,并在 /protected/modules/admin/view/layouts/main.php 中有示例内容的布局

<b>$content</b>

最后我想要

<a><b>view</b></a>

另外在 /themes/panel/views/layouts/main.php 我需要从模块加载 css 文件。


另外的解释: 我有一个适用于所有面板(页眉、css 文件、页脚)的模板,但是每个面板都需要单独的布局(只有中间的内容会发生变化,如菜单等)和一个或多个单独的 css 文件。

还有一些图片将包含在主题中,其他图片将单独用于模块。

【问题讨论】:

    标签: layout module yii themes


    【解决方案1】:

    您可以使用 renderPartial 函数来加载布局部分。

    <?= $this->renderPartial('webroot.themes.' . Yii::app()->theme->name . '.views.layouts.' . Yii::app()->layout . '.<PART_OF_LAYOUT>') ?>
    

    【讨论】:

    • 谢谢,我会检查一下。我应该以什么方式为 X 模块中的所有视图加载 /protected/modules/X/views/layouts/main.php?我需要以应用程序知道从模块文件夹加载图像的方式加载,但我还需要从 /themes/panel/img 加载图像。
    【解决方案2】:

    我不同意,在 Internet 的许多帮助论坛中,当有人要求对模块进行主题化时,每个人都会建议主题文件夹的路径别名。我认为这是错误的,因为它意味着要拆分模块,并且模块应该是可以跨项目使用的黑盒。只有在多个模块之间共享一个主题时,此类论坛中给出的建议才有效。如果有人想在模块中“打包”一个主题,她可以: - 向模块的控制器添加一个初始化函数 - 在该初始化中,使用类属性布局和路径别名,像这样,假设一个模块的 id 是“Sample”: 然后添加到 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

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 2014-11-01
      • 2013-10-25
      • 2012-08-24
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多