zf2中不同模块的不同布局

时间:2015-03-12 06:24:31

标签: zend-framework2

如何为不同的模块设置不同的布局。我已经使用了行动的布局,即

public function indexAction(){

     $this->layout()->setTemplate('layout/manager');
     return new ViewModel();
 }

工作正常。但我想要它默认为这个模块。所以我在构造中使用它。但是这种布局在构造中不起作用。任何人都可以告诉我如何在没有控制器操作的情况下将此布局用于此模块。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

假设您有一个名为Administration

的模块

第1步 Module.php 文件中添加以下行:

第一个函数中特别注意的是onBootstrap函数,添加必要的行而不是覆盖它。

<强>模块/行政/ Module.php

public function onBootstrap($e) {
    // Register a dispatch event
    $app = $e->getParam('application');
    $app->getEventManager()->attach('dispatch', array($this, 'setLayout'));
}
public function setLayout($e) {
    $matches = $e->getRouteMatch();
    $controller = $matches->getParam('controller');
    if (false === strpos($controller, __NAMESPACE__)) {
        // not a controller from this module
        return;
    }

    // Set the layout template
    $viewModel = $e->getViewModel();
    if ($viewModel->getTemplate() === 'layout/layout') {
        $viewModel->setTemplate('layout/administration');
    }
}

第2步 module.config.php 文件中添加以下行:

<强>模块/管理/配置/ module.config.php

'view_manager' => array(
    'template_map' => array(
        'layout/administration' => __DIR__ . '/../view/layout/layout.phtml',
    ),
    'template_path_stack' => array(
        'administration' => __DIR__ . '/../view',
    ),
),

只有在您要区分的模块中才需要进行这些更改。

答案 1 :(得分:1)

每个模块都有一个不同布局的模块。

https://github.com/EvanDotPro/EdpModuleLayouts

非常容易使用,只遵循自述指示