2013-04-29 35 views
3

./config/application.config.phpZendFramework 2 - 錯誤裝載佈局不同模塊

return array(
    'modules' => array(
     'Application', 
     'Admin', 
    ) 
    ... 

我有2個單獨的佈局,./module/Application/view/layout/layout.phtml的集合和./module/Admin/view/layout/layout.phtml

./module/Admin/config/module.config.php

... 
'template_map' => array(
    'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 
    'header'  => __DIR__ . '/../view/layout/header.phtml', 
    'footer'  => __DIR__ . '/../view/layout/footer.phtml', 
    'paginator'  => __DIR__ . '/../view/layout/paginator.phtml', 
    'error/404'  => __DIR__ . '/../view/error/404.phtml', 
    'error/index' => __DIR__ . '/../view/error/index.phtml', 
) 
... 

./module/Application/config/module.config.php

... 
'template_map' => array(
    'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 
    'header'  => __DIR__ . '/../view/layout/header.phtml', 
    'footer'  => __DIR__ . '/../view/layout/footer.phtml', 
    'paginator'  => __DIR__ . '/../view/layout/paginator.phtml', 
    'error/404'  => __DIR__ . '/../view/error/404.phtml', 
    'error/index' => __DIR__ . '/../view/error/index.phtml', 
) 
... 

基本上他們是不同的設置和一些內容是不同的。不幸的是,這兩個模塊只加載位於./module/Admin/config/module.config.php的佈局

我GOOGLE了,但沒有來自我想要的任何解決方案。任何人都有這個想法嗎?

回答

8

你可能有興趣知道你的配置實際上做了什麼。 My Blog Post about this Topic,可能會讓你感興趣。最終所有的配置文件將被合併爲一個。全局配置鍵在每個模塊的基礎不

要實現你的目標,你應該閱讀Evan Courys Blog Post "Module-specific layouts in ZF2"

埃文提供a Module "EdpModuleLayouts"這使事情很容易。然而,如果你只需要一個替代佈局爲您AdminModule,那麼我建議你簡單地用他的博客的示例代碼去通過您的AdminModule/Module::onBootstrap

class Module 
{ 
    public function onBootstrap($e) 
    { 
     $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function($e) { 
      $controller  = $e->getTarget(); 
      $controllerClass = get_class($controller); 
      $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); 
      if ('AdminModule' === $moduleNamespace) { 
       $controller->layout('layout/admin'); 
      } 
     }, 100); 
    } 
} 

不,這將設置爲您的AdminModule directy備用佈局佈局到layout/admin。您需要通過您的配置提供此密鑰:

'template_map' => array(
    'layout/admin' => 'path/to/admin/module/view/layout/admin.phtml', 
) 
+0

哇!它完美的作品。謝謝 – 2013-04-30 03:09:52

+0

在ZF 2.2.2中,我必須替換$ moduleNamespace變量,然後它對我有用:'if('Admin'=== $ moduleNamespace){$ controller-> layout('layout/admin'); }' – 2014-03-30 13:16:40