2013-10-24 4 views
4

У меня есть два модуля Студент и Учитель. У меня также есть два разных макета: studentlayout.phtml и еще один teacherlayout.phtmlУстановить различные макеты для разных модулей в Zend Framework 2?

Как я могу установить studentlayout для модуля Student и teacherlayout для Teachermodule?

Как ответ Сэма. Спасибо за его работу.

но я также хочу установить два разных макета для учителя. Так я добавить следующий код в моем основном конфигурационном файле для проекта:

'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

Я обозначаемое все старый поста здесь, но его не могу дать мне правильный ответ, поэтому я отправляю свой квест n здесь. –

+0

Я использую EdpModuleLayouts, но который используется только для заданного макета в том же модуле. Как его вызов для нескольких модулей? –

+1

EdpModuleLayouts СПЕЦИАЛЬНО разработан для работы с несколькими макетами для нескольких разных модулей. Я ** настоятельно предлагаю вам прочитать readme о модуле, чтобы понять, как это работает (или просто посмотреть на Module.php и понять код - это действительно прямой код) – Sam

ответ

3

Использование

Использование EdpModuleLayouts очень, очень просто. В любом конфигурационном файле конфигурации или автозагрузочном файле конфигурации просто укажите следующее:

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

Вот и все! Конечно, вам также нужно определить эти макеты ... просто проверьте Модули приложений module.config.php, чтобы узнать, как определить макет.

1

Если вы хотите изменить макет только для своего действия, вы можете использовать плагин layout() в действии ваших контроллеров или если вы хотите разный макет для всех действий в одном контроллере только в своем модуле, вы можете сделать это в бутстрапе:

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'); 
} 

После каждого действия в этом контроллере вы изменить корневую ViewModel макет вы можете пойти дальше и указать здесь несколько контроллеров, где вы хотите, чтобы ваш макет как этого

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

Спасибо за этот простой трюк. Я удивлен, что Zend Framework 2 не имеет надлежащего обработчика макета для разных модулей ... это должно быть как основная вещь –

Смежные вопросы