1

モジュールで作業レイアウトを取得しようとしています。そこで、 「adminLayout」というモジュールのビューフォルダーにレイアウトを作成しました

AdminModule.phpinit() メソッドでレイアウトを想定しています。したがって、次のようになります。

public function init()
{

    $this->layoutPath = Yii::getPathOfAlias('application.modules.admin.views.layouts');
    $this->layout = 'adminLayout';
    // this method is called when the module is being created
    // you may place code here to customize the module or the application

    // import the module-level models and components
    $this->setImport(array(
        'admin.models.*',
        'admin.components.*',
    ));


}

しかし、何らかの理由でレイアウトがモジュールに適用されませんでした。「public $layout」をコントローラーに追加しようとしましたが、機能します。

何が問題なのかわかりません。

また、構成フォルダーにレイアウト設定を追加しようとしましmain.phpたが、まだアクションはありません。誰かが助けてくれれば感謝します。

4

3 に答える 3

4

解決策は、モジュールの beforeControllerAction にレイアウトを設定することです。それはうまくいくはずです。

 public function beforeControllerAction($controller, $action)
  {
    if(parent::beforeControllerAction($controller, $action))
    {
      $controller->layout = 'adminLayout';
      return true;
    }
    else
      return false;
  }
于 2013-07-26T12:31:12.427 に答える
2

この件に関しては多くの投稿があり、答えは Yii ドキュメントにあります。

レイアウト プロパティ

パブリック混合 $layout;

このモジュール内のコントローラーによって共有されるレイアウト。コントローラーが独自のレイアウトを明示的に宣言している場合、このプロパティは無視されます。これが null (デフォルト) の場合、アプリケーションのレイアウトまたは親モジュールのレイアウト (利用可能な場合) が使用されます。これが false の場合、レイアウトは使用されません。

コントローラー内からモジュールを検出し、それに応じてレイアウトを設定するだけです。

class Controller extends CController
{

public function init(){

    //Set layout
    $this->layout = ($this->module->id=='admin') ? '//layouts/column2' : '//layouts/column1';
.........
}
于 2014-09-17T09:50:17.333 に答える