クライアントのフロントエンドに画像ローテーターが表示された派手なページがあります。
バックエンドについては、別のレイアウトにしたいです。複数のレイアウトを使用できますか?
少しヒントがあります
クライアントのフロントエンドに画像ローテーターが表示された派手なページがあります。
バックエンドについては、別のレイアウトにしたいです。複数のレイアウトを使用できますか?
少しヒントがあります
デフォルト以外のモジュールが呼び出されたときにレイアウトを切り替えるために、レイアウト プラグインを作成します。
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
はい、リクエストに基づいてレイアウトを切り替えるのはそれほど簡単ではありませんが、複数のレイアウトを持つことができます。
私はこれを十分な回数行わなければならなかったので、自由に使用したり、インスピレーションを得たりできるコントローラーアクションヘルパーとアプリケーションリソースプラグインを開発することになりました。
これは間違っています。この線:
class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout
である必要がありますextends Zend_Controller_Plugin_Abstract
。そうしないと、に関するエラーが発生しますmvcSuccessfulActionOnly
。
試す
//in controller
$this->_helper->layout->setLayout('layoutName');
モジュールのview/scriptsフォルダーでレイアウトをlayoutName.phtmlに切り替えます;)