3

クライアントのフロントエンドに画像ローテーターが表示された派手なページがあります。

バックエンドについては、別のレイアウトにしたいです。複数のレイアウトを使用できますか?

少しヒントがあります

4

4 に答える 4

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);
    }

}

次に、Bootstrap で次のようにします。

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
于 2010-11-28T09:53:45.870 に答える
1

はい、リクエストに基づいてレイアウトを切り替えるのはそれほど簡単ではありませんが、複数のレイアウトを持つことができます。

私はこれを十分な回数行わなければならなかったので、自由に使用したり、インスピレーションを得たりできるコントローラーアクションヘルパーとアプリケーションリソースプラグインを開発することになりました。

ModuleLayoutアプリケーションリソースプラグイン

ModuleLayoutLoaderコントローラーアクションヘルパー

于 2010-11-28T09:52:06.427 に答える
1

これは間違っています。この線:

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout

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

于 2012-07-04T01:24:16.230 に答える
1

試す

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

モジュールのview/scriptsフォルダーでレイアウトをlayoutName.phtmlに切り替えます;)

于 2011-03-25T16:59:50.677 に答える