2010-11-28 14 views
3

私はクライアントのフロントエンドにイメージローテーターを備えた派手なページを持っています。Zend Frameworkで複数のレイアウトを使用できますか?

バックエンドの場合、私は別のレイアウトをしたいです。私は複数のレイアウトを持つことができますか?要求に基づいて、それらを切り替えることそれほど単純ではないですが、

少しヒントが

答えて

6

私は、デフォルト以外のモジュールが呼び出されたときにレイアウトを切り替えるには、レイアウトのプラグインを作成:

class MyApplication_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     switch ($request->getModuleName()) { 
      case 'admin': $this->_moduleChange('admin'); 
     } 
    } 

    protected function _moduleChange($moduleName) { 
     $this->getLayout()->setLayoutPath(
      dirname(dirname(
       $this->getLayout()->getLayoutPath() 
      )) 
      . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName 
     ); 
     $this->getLayout()->setLayout($moduleName); 
    } 

} 

その後、私のブートストラップでは、私はこれを行う:

Zend_Layout::startMvc(
      array(
       'layoutPath' => self::$root . '/application/views/layouts/scripts', 
       'layout' => 'layout', 
       'pluginClass' => 'MyApplication_Layout_Controller_Plugin_Layout' 
      ) 
     ); 

デフォルト以外のレイアウトは、モジュールの後、私のディレクトリ構造は次のようになりますので:

/path/to/application/views/layouts/scripts/layout.phtml --> default layout 

/path/to/application/views/layouts/scripts/admin/admin.phtml --> admin layout 
+0

ありがとう...返信申し訳ありません。遅くとも –

1

かなりのだろうはい、あなたは複数のレイアウトを持つことができます。

私はコントローラアクションヘルパーとアプリケーションリソースプラグインを開発してしまったので、これを自由に使用したりインスピレーションを得たりしなければなりませんでした。

ModuleLayout Application Resource Plugin

ModuleLayoutLoader Controller Action Helper

1

は、それはあなたのモジュールのビュー/ scriptsフォルダにlayoutName.phtmlにレイアウトを切り替えます

//in controller 
$this->_helper->layout->setLayout('layoutName'); 

を試してみてください;)

+0

これはまったく動作しません。 $ this - > _ helper-> layout-> setLayout( 'layoutname') – Andy

+0

はい、明らかに正しいです。それを私が直した。 –

+0

速くて効果的な、tip @TomášFejfarのおかげで! –

1

これは、違う。行:

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout 

extends Zend_Controller_Plugin_Abstractである必要があります。そうしないと、mvcSuccessfulActionOnlyに関するエラーが発生します。

関連する問題