2013-10-24 52 views
4

我有两个模块的学生和老师。 我也有两个不同的布局,一个是studentlayout.phtml,另一个是teacherlayout.phtml在Zend Framework 2中为不同的模块设置不同的布局?

如何为Teachermodule设置学生模块和teacherlayout的studentlayout?

由于萨姆的回答。感谢它的工作正常。

但我也想为教师设置两种不同的布局。 所以我添加下面的代码在我的主配置文件的项目:教师模块

'module_layouts' => array(

    'Teacher' => array(
     'default' => 'layout/adminlayout', 
     'login' => 'layout/loginlayout', 
    ), 
    'Student' => 'layout/studentlayout', 
), 

我module.config.php文件:

'module_layouts' => array(

    'Teacher' => array(
     'default' => 'layout/adminlayout', 
     'login' => 'layout/loginlayout', 
    ), 
     'Student' => 'layout/studentlayout', 
), 

但所有专任教师模块取adminlayout的一切行动。为什么登录操作无法使用loginlayout?它的ovveride?

+0

我已经在这里下文称所有的旧帖子在这里更多的控制器,但它不能给我适当的答案,所以我张贴我的问题在这里。 –

+0

我使用EdpModuleLayouts,但只用于相同模块中的布局布局。它如何调用多个模块? –

+1

EdpModuleLayouts特别设计用于几种不同模块的几种布局。我**强烈**建议您阅读有关模块的自述文件以了解其工作原理(或仅查看Module.php并理解代码 - 它的代码非常简单) – Sam

回答

3

使用

使用EdpModuleLayouts是非常,非常简单。在任何模块配置或自动加载的配置文件中,只需指定以下内容:

array(
    'module_layouts' => array(
     'Teacher' => 'layout/teacher', 
     'Student' => 'layout/student' 
    ), 
); 

就是这样!当然,您也需要定义这些布局......只需查看应用程序模块module.config.php以了解如何定义布局。

1

如果你只想改变你的一个动作的布局,你可以在你的控制器动作中使用layout()插件,或者如果你想在你的模块中的一个控制器中的所有动作有不同的布局,你可以在bootstrap中做到这一点:

public function onBootstrap(\Zend\EventManager\EventInterface $e) { 
    $eventManager = $e->getApplication()->getEventManager(); 
    $sharedEventManager = $eventManager->getSharedManager(); 
    $sharedEventManager->attach('Auth\Controller\AuthController', \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch')); 
} 

public function onDispatch(MvcEvent $e) { 
    $controller = $e->getTarget();  
    $controller->layout('layout/loginLayout'); 
} 

在控制器的每个动作,你将改变根视图模型后布局,可以走得更远,并指定您希望您的布局像这样

$sharedEventManager>attach(array('Auth\Controller\AuthController', 
'Auth\Controller\Registration'), 
\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'onDispatch')); 
} 
+0

感谢您使用这个简单的技巧。我很惊讶Zend Framework 2对于不同的模块没有适当的布局处理程序......应该像基本的东西 –

相关问题