5

我对 Zend Framework 中的布局有疑问。这是我的项目结构:

  • 我有 2 个名为“backoffice”和“frontoffice”的模块。
  • 我在后台和前台的布局/脚本中有一个 layout.phtml。
  • 现在我想为“后台”和“前台”分别设置“布局/脚本”
  • 在我的 application.ini 中,我有:resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

现在我该如何解决这个我有单独的布局?

4

4 回答 4

8

只需在layout/scripts文件夹中放置另一个布局,并告诉任何模块、控制器或操作使用该其他布局而不是默认布局。

如果你想让控制器使用不同的布局,你可以在你的init()

$this->_helper->layout->setLayout('layoutname');

您可以分别针对特定操作或整个模块执行此操作。

于 2013-01-17T18:12:47.250 回答
3

把它放到你的 application.ini

resources.layout.layout = "layout"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

您的布局文件将是 /modules/MODULE_NAME/views/scripts/layout.phtml

于 2013-01-18T17:52:59.413 回答
1

您应该为此目的编写前端控制器插件(称为布局选择器)。

在您的 Bootstrap.php 中注册该插件 - 布局选择器:

protected function _initPlugins(){
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new My_Plugins_LayoutSelector());
}

在 application.ini 中自动加载命名空间 My_

Autoloadernamespaces[] = "My_"

最后,在 /library 中创建一个新文件夹“My”,并在其中创建文件夹“Plugins”,并在其中包含代码的文件“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);
    }
}

这样以后每个模块都会使用合适的布局,不需要在每个控制器中编写来选择布局。

于 2013-01-18T11:00:41.357 回答
0

我使用这个自定义插件进行了一些更改,并为每个模块创建了特定的布局,具有特定的结构 http://blog.vandenbos.org/2009/07/19/zend-framework-module-specific-layout/

于 2013-01-18T11:09:52.450 回答