Zend Framework — Инициализация основных параметров view и layout для модуля
Zend Framework автоматически сам не умеет подгружать layout-ы и конфигурировать объект view в соответствии с настройками модуля, прописанными в конфигурационном файле. Эта задача возложена на плечи разработчика. Приведенный плагин будет автоматически применять некоторые параметры к данным объектам, если эти параметры прописаны в конфигурационном файле. Данный плагин не зависит от предыдущего плагина объединения конфигурационных файлов. Ему не важно, в каком файле будет прописана конфигурация для модуля.
Плагин инициализирует следующие параметры модуля, если они прописаны:
modulename.resources.layout.layoutPath = "/относительный/путь/от/директории/модуля/" modulename.resources.layout.layout = "имя шаблона" modulename.resources.view.doctype = "тип документа для тэга DOCTYPE" modulename.resources.view.encoding = "кодировка" modulename.resources.view.contentType = "Сontent Type" modulename.resources.view.title = "Заголовок сайта" modulename.resources.view.titleSeparator = " разделитель для заголовка " modulename.resources.view.pragmaNoCache = "On/Off" ;включение/выключение кэширования браузером |
modulename.
следует опустить, если вы используете предыдущий плагин для склейки конфигов и прописываете параметры в файле module.ini
. Плюс в application.ini
следует проинициализировать все данные параметры без modulename.
. Эти параметры будут использоваться по умолчанию, если для конкретного модуля они не заданы. resources.layout.layoutPath
в application.ini
должен иметь абсолютный путь, как это сделано по умолчанию при создании проекта и включении layout-ов через консольное приложение zf
.
Пример для application/configs/application.ini
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.layout.layout = "layout" resources.view.doctype = "XHTML1_STRICT" resources.view.encoding = "UTF-8" resources.view.contentType = "text/html; charset=utf-8" resources.view.title = "Тестовый проект" resources.view.titleSeparator = " :: " resources.view.pragmaNoCache = "On" |
Пример для application/modules/admin/configs/module.ini
resources.view.title = "Администрирование" resources.layout.layoutPath = "/layouts/scripts" ;шаблон будет подгружаться из /application/modules/admin/layouts/scripts |
Собственно, реализация:
<?php /** * Module view & layout config * Инициализирует свойства объектов view и layout из конфига для * выбранного модуля. * * @category RV * @package RV_Controller * @subpackage Plugins * @copyright Copyright (c) 2010 Roman V. Konovaltsev * @author Roman V. Konovaltsev * @version 1.0 */ /** * @see Zend_Controller_Plugin_Abstract */ require_once 'Zend/Controller/Plugin/Abstract.php'; class RV_Controller_Plugin_ModuleConfigLV extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { $layout = Zend_Layout::getMvcInstance (); $front = Zend_Controller_Front::getInstance (); $bootstrap = $front->getParam('bootstrap'); $options = $bootstrap->getOptions(); $view = $bootstrap->getResource('view'); $module = $this->getRequest()->getModuleName(); // Set defaults $pragmaNoCache = (isset($options['resources']['view']['pragmaNoCache']) && strtolower($options['resources']['view']['pragmaNoCache']) == 'on')? true : false; $dLayout = isset($options['resources']['layout']['layout'])? $options['resources']['layout']['layout'] : $layout->getLayout(); $dLayoutPath = isset($options['resources']['layout']['layoutPath'])? $options['resources']['layout']['layoutPath'] : $layout->getLayoutPath(); $dViewDoctype = isset($options['resources']['view']['doctype'])? $options['resources']['view']['doctype'] : $view->doctype()->getDocType(); $dViewEncoding = isset($options['resources']['view']['encoding'])? $options['resources']['view']['encoding'] : $view->getEncoding(); $dViewContentType = isset($options['resources']['view']['contentType'])? $options['resources']['view']['contentType'] : NULL; $dViewHeadTitle = isset($options['resources']['view']['title'])? $options['resources']['view']['title'] : NULL; $dViewHeadTitleSeparator = isset($options['resources']['view']['titleSeparator'])? $options['resources']['view']['titleSeparator'] : NULL; if(isset($options[$module]['resources']['layout']['layout'])) $layout->setLayout($options[$module]['resources']['layout']['layout']); else $layout->setLayout($dLayout); if(isset($options[$module]['resources']['layout']['layoutPath'])) $layout->setLayoutPath($front->getModuleDirectory().$options[$module]['resources']['layout']['layoutPath']); else $layout->setLayoutPath($dLayoutPath); if(isset($options[$module]['resources']['view']['doctype'])) $view->doctype($options[$module]['resources']['view']['doctype']); else $view->doctype($dViewDoctype); if(isset($options[$module]['resources']['view']['encoding'])) $view->setEncoding($options[$module]['resources']['view']['encoding']); else $view->setEncoding($dViewEncoding); // Set Content Type if (isset($options[$module]['resources']['view']['contentType'])) $view->headMeta()->appendHttpEquiv('Content-Type', $options[$module]['resources']['view']['contentType']); elseif(!is_null($dViewContentType)) $view->headMeta()->appendHttpEquiv('Content-Type', $dViewContentType); // Set Head Title if (isset($options[$module]['resources']['view']['title'])) $view->headTitle($options[$module]['resources']['view']['title']); elseif(!is_null($dViewHeadTitle)) $view->headTitle($dViewHeadTitle); // Set Separator if (isset($options[$module]['resources']['view']['titleSeparator'])) $view->headTitle()->setSeparator($options[$module]['resources']['view']['titleSeparator']); elseif(!is_null($dViewHeadTitleSeparator)) $view->headTitle()->setSeparator($dViewHeadTitleSeparator); if(isset($options[$module]['resources']['view']['pragmaNoCache'])) { $pragmaNoCache = strtolower($options[$module]['resources']['view']['pragmaNoCache']) == 'on'? true : false; } if($pragmaNoCache) { $view->headMeta()->appendHttpEquiv('expires', 'Wed, 26 Feb 1997 08:21:57 GMT') ->appendHttpEquiv('pragma', 'no-cache') ->appendHttpEquiv('Cache-Control', 'no-cache'); } } } |
Для работы данного кода необходимо положить данный файл по адресу
/path/to/your/project/library/RV/Controller/Plugin/ModuleConfigLV.php
и прописать следующее в application.ini
:
autoloaderNamespaces.RV = "RV_" resources.frontController.plugins.moduleConfigLV = "RV_Controller_Plugin_ModuleConfigLV" |
см. также
- Zend Framework — Модульная структуры проекта
- Zend Framework — Объединение конфигов с поддержкой модулей
- Zend Framework — Пример организации модульной структуры проекта
Вы можете отслеживать комментарии к этой записи с помощью RSS 2.0. Вы можете оставить комментарий, или использовать trackback с вашего сайта.