現在、モジュールごとに異なるレイアウト ファイルをロードする作業を行っています。
config.ini ファイルに以下を追加しました
; Module Support
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
; Module-based Layout Support
resources.layout.pluginClass= "Layout_Plugin_ModuleLayout"
そして、次のコントローラ プラグイン:
class Layout_Plugin_ModuleLayout extends Zend_Layout_Controller_Plugin_Layout {
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getLayout()->setLayoutPath(
Zend_Controller_Front::getInstance()
->getModuleDirectory($request->getModuleName()) . '/layouts'
);
$this->getLayout()->setLayout('layout');
}
}
すべて正常に動作しますが、このプラグインを他のプラグインと一緒にブートストラップ ファイルに登録することをお勧めします。このプラグインを Bootstrap ファイルに移動し、次のように登録すると:
protected function _initLayouts() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Layout_Plugin_ModuleLayout());
}
次のエラーが表示されます。
致命的なエラー: 31 行目の C:\workarea\web_projects\gam\trunk\website\library\Layout\Plugin\ModuleLayout.php の非オブジェクトに対するメンバー関数 setLayoutPath() の呼び出し
明らかに、私は何か間違ったことをしている、またはこのプラグインの仕組みを誤解しています。
編集: 最終的にhttp://dustint.com/post/28/per-module-zend_layoutでソリューションの修正版を使用しました。ただし、これに関する提案は受け付けています。このソリューションでは通常のコントローラー プラグを使用しますが、レイアウト プラグイン タイプを使用する必要があると思います。しかし、それはうまくいきました。