Symbi0t
@Symbi0t

Как установить разные шаблоны для разных модулей в ZF2?

У меня используется набор разных модулей. Одни предназначены для админки, другие для публичной части сайта.
Мне необходимо, чтобы для всех модулей админки использовался один шаблон, а для всех модулей публичной части - другой.
Вставлять в каждый модуль копию шаблона - не вариант. Система наследования тоже не помогает. Как быть?

В данный момент использую следующий механизм:
$eventManager->attach('dispatch', array($this, 'setLayout'), -100);
	
    public function setLayout($e)
    {
        $matches    = $e->getRouteMatch();
        $controller = $matches->getParam('controller');
        if (0 !== strpos($controller, __NAMESPACE__, 0)) {
            // not a controller from this module
            return;
        }
 
        // Set the layout template
        $viewModel = $e->getViewModel();
        $viewModel->setTemplate('layout/dashboard');
    }


Но из-за этого появляется проблема, в виде невозможности отключить вывод шаблона ($view->setTerminal(true))
  • Вопрос задан
  • 2557 просмотров
Пригласить эксперта
Ответы на вопрос 1
Symbi0t
@Symbi0t Автор вопроса
Пардон. Уже разобрался.

В конфигурационном файле определенного модуля (module.config.php) добавляем следующее:
'view_manager' => array(
        'template_path_stack' => array(
            'lists' => __DIR__ . '/../view',
        ),
	'template_map' => array(
             'adminLayout'   =>  __DIR__ . '/../view/layout/layout.phtml',
        ),
    ),


И в файле Module.php добавляем метод init(), предварительно не забыв подключить класс ModuleManager:
use Zend\ModuleManager\ModuleManager;
....
public function init(ModuleManager $moduleManager) {
        $sharedEvents = $moduleManager->getEventManager()->getSharedManager();
        $sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
            $controller = $e->getTarget();
            $controller->layout('adminLayout');
        }, 100);
    }


Источник
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы