0

在 yii 中,我创建了一个名为“admin”的模块,我想将该模块设置为使用我自定义的布局而不是默认的。所以我搜索了一些帖子,它工作了!
这是我读到的帖子:

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

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


  1. 帖子说的layoutPath配置layoutPah
    $this->layoutPath = Yii::getPathOfAlias('administration.views.layouts');
    变量让我很困惑,似乎这个var没有在任何类中定义。那么为什么它可以被调用$this
  2. /layouts/main
    什么时候使用它不起作用,应用程序仍然调用默认主布局而不是我的有/layouts/main什么 区别?//layouts/main//layouts/main
  3. 覆写
    帖子中还说public $layout='//layouts/column1';在控制器中覆盖了init()模块控制器的方法中设置的值。这是真的吗?
4

2 回答 2

2
  1. layoutPath
    LayoutPath 的定义CWebApplicationwiki 中的详细信息, 因此您可以使用: Yii::app()->layoutPath= Yii::getPathOfAlias('administration.views.layouts');

  2. 彼得M回答

  3. 覆盖参见CController 布局属性的描述:

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

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

于 2013-10-17T11:28:51.007 回答
0

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

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

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

/**
 * @inheritdoc
 */
public function init()
{
    parent::init();

    Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
}
于 2016-09-25T06:18:10.370 回答