Module View Layout

11 Май
2012

Использовать в шаблонах для всех модулей один и тот же layout не есть всегда удобно. Например, для админки нам не нужен красивый дизайн с «рющечками», а нужен минимализм. Из коробки Zend Framework, как я понял, не умеет каждому модулю подставлять свой layout. Чтож научим наше приложение использовать различные layout для разных модулей, учить будем через плагин приложения.

Напишем наш плагин и сохраним его в файл application/plugins/MultiLayout.php

<?php
class Application_Plugin_MultiLayout extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $moduleName = $request->getModuleName();
        $mvcInstance = Zend_Layout::getMvcInstance();
        $layoutFile = $mvcInstance->getLayoutPath().$moduleName.'.phtml';
        if (file_exists($layoutFile)) {
            $mvcInstance->setLayout($moduleName);
        } else {
            $mvcInstance->setLayout('mvcInstance');
        }

        parent::preDispatch($request);
    }

}

Включим наш плагин. Для это в application/configs/application.ini добавим строчку

resources.frontController.plugins.LayoutPlugin = "Application_Plugin_MultiLayout"

Добавим новый модуль «backend», набрав команду

zf create module backend

В дефолтной папке с layouts можно создать новый layout в виде файла с именем backend.phtml. Теперь для модуля будет использоваться не layout.phtml, а backend.phtml.

Оставить комментарий или два

Наверх
Rambler's Top100