易模块布局定制


yii module layouts customize

在yii中,我创建了一个名为"admin"的模块,我想将模块设置为使用我自定义的布局,而不是我搜索一些帖子 defalult.so,它奏效了!
这是我读到的帖子:

http://www.yiiframework.com/forum/index.php/topic/24767-module-layout/

将我的应用程序

配置为帖子后,我的应用程序运行良好,但现在我有一些问题:

  1. 布局路径
    帖子说配置

    $this->layoutPath = Yii::getPathOfAlias('administration.views.layouts');layoutPah 变量让我非常困惑,似乎这个 var 没有定义 class.so 为什么它可以被 $this 调用?

  2. /layouts/main/layouts/main//layouts/main有什么区别使用//layouts/main时它不起作用,应用程序仍然调用默认主布局不是我的?
  3. 覆盖
    该帖子还表示,控制器中的public $layout='//layouts/column1';覆盖了在init()方法中为模块控制器设置的值。这是真的吗?
  1. 布局路径
    布局路径的定义CWebApplication 在 wiki 中查看详细信息因此,您可以使用以下内容来访问它: Yii::app()->layoutPath= Yii::getPathOfAlias('administration.views.layouts');

  2. 回答者 彼得·

  3. 覆盖请参阅主计长布局属性的说明:

    要应用于此控制器视图的布局的名称。默认值为 null,表示使用应用程序布局。如果为 false,则不会应用任何布局。如果控制器属于模块并且此布局属性为 null,则将使用模块布局。

因此,您需要将其设置为 null,然后将使用模块布局。注意:在控制器的任何操作中,您可以将布局设置为 null $this->layout=null;这样布局仅在此操作中为空,而在其他操作中不为空!

您可以将以下代码放入控制器中。

public function init()
{
    Yii::$app->setLayoutPath($this->module->getBasePath().'/views/layout');
}

或者您可以将以下代码放在模块引导类中

/**
 * @inheritdoc
 */
public function init()
{
    parent::init();
    Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
}