我对Zend Framework中的布局有疑问。 这是我的项目结构:
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
现在我怎么能解决这个问题呢?我有单独的布局?
答案 0 :(得分:8)
只需在layout/scripts
文件夹中放置另一个布局,并告诉任何模块,控制器或操作使用其他布局而不是默认布局。
如果您想让控制器使用不同的布局,您可以将以下内容放在init()
$this->_helper->layout->setLayout('layoutname');
您可以分别针对特定操作或整个模块执行此操作。
答案 1 :(得分:3)
将它放入您的application.ini
resources.layout.layout = "layout"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
您的布局文件将是/modules/MODULE_NAME/views/scripts/layout.phtml
答案 2 :(得分:1)
您应该为此目的编写前端控制器插件(称为布局选择器)。
在你的Bootstrap.php注册表中插件 - 布局选择器:
protected function _initPlugins(){
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new My_Plugins_LayoutSelector());
}
在application.ini中自动加载名称空间My_
Autoloadernamespaces[] = "My_"
最后,在/ library中创建一个新文件夹'我的'并在其中的文件夹'插件'并在文件' LayoutSelector.php'代码:
class My_Plugins_LayoutSelector extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$module = $request->getModuleName();
$layout = Zend_Layout::getMvcInstance();
$layout->setLayout($module);
}
}
通过这种方式,将来每个模块都将使用适当的布局,无需在每个控制器中写入以选择布局。