每个模块的布局zf2

时间:2015-02-04 15:52:35

标签: php templates module zend-framework2 zend-layout

我有2个模块,我需要为每个模块使用不同的布局,但所有模块总是使用第二个加载模块的布局。

application.config.php

return array(
// This should be an array of module namespaces used in the application.
'modules' => array(
    'news',//in this module use Application layout
    'Application',
),

3 个答案:

答案 0 :(得分:2)

您可以使用EdpModuleLayouts。它是一个ZF2模块,允许您为每个模块配置不同的布局。它的用法非常简单:

  • 只需将其安装在项目的供应商文件夹中
  • 即可
  • EdpModuleLayouts文件中启用application.config.php模块:

    'modules' => array(
    'EdpModuleLayouts', //<---add this line
    'News',
    'Application',
    ),
    
  • 在两个模块之一的module.config.php文件中定义每个模块的布局,例如在“应用程序”模块中。在这里,我们设置了两种布局:新闻模块的news/layout应用程序模块的layout/layout

    'view_manager' => array(
    'display_not_found_reason' => true,
    'display_exceptions'       => true,
    'doctype'                  => 'XHTML1_TRANSITIONAL',
    'not_found_template'       => 'error/404',
    'exception_template'       => 'error/index',
    'template_map' => array(
        'news/layout'    => __DIR__ . '/../../News/view/layout/admin-layout.phtml',
        'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
        'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
        'error/404'               => __DIR__ . '/../view/error/404.phtml',
        'error/index'             => __DIR__ . '/../view/error/index.phtml',
    ),
    'template_path_stack' => array(
        'application' => __DIR__ . '/../view',
        'news' => __DIR__ . '/../../News/view',
    ),
    ),
    
    'module_layouts' => array(
            'Application' => 'layout/layout',
            'News' => 'news/layout',
    ),
    

答案 1 :(得分:0)

  1. {MyNewModule}/Module.php

    中设置
    namespace {MyNewModule};
    
    use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
    use Zend\Mvc\ModuleRouteListener;
    use Zend\ModuleManager\ModuleManager;
    use Zend\Mvc\MvcEvent;
    
  2. 创建一个新的方法初始化。

    public function init(ModuleManager $manager){
    
    $events = $manager->getEventManager();
    $sharedEvents = $events->getSharedManager();
    $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
        $controller = $e->getTarget();
        $controller->layout('layout/***customFile.phtm***');
    }, 100);
    
    }
    
  3. F5,给浏览器充值。

  4. 微笑:D

答案 2 :(得分:0)

我也有同样的情况,并解决它:

如果有loginapplication模块,我所做的就是确定global.php中的布局,如下所示:

return array(
     'module_layouts' => array(
        'Application' => 'layout/layout.phtml',
        'Login' => 'layout/login.phtml' 
),
);

现在您应该在视图布局登录中创建一个文件夹,login.phtml

现在在登录模块的配置中。 Module.config.php

      'view_manager' => array(
            'template_path_stack' => array(
                'Login' => __DIR__ . '/../view',
            ), 
          )
;

这应该让你感到高兴。

相关问题