1.3 Zend Framework — Быстрый старт. Создание макета |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Вы могли заметить что скрипты вида в предыдущих разделах были фрагментами HTML — не полными страницами. Так было задумано; мы хотим чтобы наши действия возвращали содержимое связанное только с самим действием (action), а не с приложением в целом.
Сейчас мы скомпонуем сгенерированный контент в полноценную HTML страницу. Мы также хотели бы иметь единообразный стиль для всего приложения. Мы будем использовать глобальный макет сайта, чтобы выполнить обе эти задачи.
В Zend Framework используються два шаблона проектирования для реализации макета: » Two Step View и » Composite View. Two Step View связан с шаблоном » Transform View; основная идея в том, что ваше приложение создает представление вида, которое потом встраиваеться на финальной стадии преобразования. Шаблон Composite View представляет собой вид (view) собранный из одиного или более атомарных, видов приложения.
В Zend Framework, Zend_Layout объединяет идеи, которые лежат в основе этих шаблонов. Вместо того, чтобы каждый view-скрипт действия должен был включать код относящийся ко всему веб-узлу, они могут просто сосредоточиться на своих собственных обязаностях.
Время от времени, тем не менее, необходима определенная информация view-скрипта в вашем макете сайта. К счастью, Zend Framework предоставляет ряд плэйсхолдеров (placeholders) вида, которые позволяют вам предоставлять такую информацию из ваших view-скриптов действий.
Что бы начать использовать Zend_Layout, первое мы должны сделать — информировать наш загрузчик (bootstrap) об использовании ресурса Layout. Это может быть сделано используя команду zf enable layout:
01. % zf enable layout
02. Layouts have been enabled, and a default layout created at
03. application/layouts/scripts/layout.phtml
04. A layout entry has been added to the application config file.
Как видим, эта команда обновила файл application/configs/application.ini, и сейчас содержит следующее внутри секции production:
01. ; application/configs/application.ini
02.
03. ; Add to [production] section:
04. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
В конечном итоге INI файл выглядит следующим образом:
01. ; application/configs/application.ini
02.
03. [production]
04. ; PHP settings we want to initialize
05. phpSettings.display_startup_errors = 0
06. phpSettings.display_errors = 0
07. includePaths.library = APPLICATION_PATH "/../library"
08. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
09. bootstrap.class = "Bootstrap"
10. appnamespace = "Application"
11. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
12. resources.frontController.params.displayExceptions = 0
13. resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
14.
15. [staging : production]
16.
17. [testing : production]
18. phpSettings.display_startup_errors = 1
19. phpSettings.display_errors = 1
20.
21. [development : production]
22. phpSettings.display_startup_errors = 1
23. phpSettings.display_errors = 1
Эта инструкция указывает приложению что бы оно скрипты для макета вида искал в application/layouts/scripts. Если посмотрите этот каталог, то увидите, что этот каталог сейчас существует и содержит файл layout.phtml.
Нам так же неоходимо обеспечить, что для нашего приложения используеться объявление XHTML DocType. Для этого, мы должны добавить ресурс в наш загрузчик (bootstrap).
Простейший путь добавить ресурс загрузчика это просто создать защищенный (protected) метод начинающийся с фразы _init. В таком случае, необходимо инициализировать doctype, следовательно мы создадим метод _initDoctype() внутри нашего класса загрузчика:
01. // application/Bootstrap.php
02.
03. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
04. {
05. protected function _initDoctype()
06. {
07. }
08. }
Внутри этого метода, мы должны подсказать виду (view) какой doctype использовать. Но где объекту вида (view object) взяться? Удобное решение, это инициализировать ресурс вида (View resource); как только мы будем иметь ресурс, мы может извлечь объект вида из загрузчика и использовать его.
Для инициализации ресурса вида, добавим следующие строки в файл application/configs/application.ini, в секцию production:
01. ; application/configs/application.ini
02.
03. ; Add to [production] section:
04. resources.view[] =
Это говорит о том, что вид инициализирован без опций ('[]' указывает, что "view" являеться массивом, и мы ни чего не передаем ему).
Теперь, объект вида, который мы имеем, позволяет полностью завершить наш метод _initDoctype(). В нем, мы сперва убедимся, что ресурс вида (View resource) запущен, выберем объект вида, и потом сконфигурируем его:
01. // application/Bootstrap.php
02.
03. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
04. {
05. protected function _initDoctype()
06. {
07. $this->bootstrap('view');
08. $view = $this->getResource('view');
09. $view->doctype('XHTML1_STRICT');
10. }
11. }
Теперь, когда мы инициализировали Zend_Layout и установили Doctype, давайте создадим наш макет сайта:
01. <!-- application/layouts/scripts/layout.phtml -->
02. <?php echo $this->doctype() ?>
03. <html xmlns="http://www.w3.org/1999/xhtml">
04. <head>
05. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
06. <title>Приложение Zend Framework — Быстрый старт</title>
07. <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
08. </head>
09. <body>
10. <div id="header" style="background-color: #EEEEEE; height: 30px;">
11. <div id="header-logo" style="float: left">
12. <b>ZF Quickstart Application</b>
13. </div>
14. <div id="header-navigation" style="float: right">
15. <a href="<?php echo $this->url(
16. array('controller'=>'guestbook'),
17. 'default',
18. true) ?>">Guestbook</a>
19. </div>
20. </div>
21.
22. <?php echo $this->layout()->content ?>
23.
24. </body>
25. </html>
Мы захватываем контент приложения используя помощники вида (view helper) layout(), и доступный ключ "content". Вы можете вывести и другие блоки если захотите этого, но в большинстве случаев этого достаточно.
Отметим также использование placeholder′а headLink(). Это простейший путь генерировать HTML элементы <link>, а также отлеживать их в вашем приложении. Если вам необходимо добавить дополнительную поддержку CSS таблиц в отдельном действии, вы можете сделать это, и быть уверенным что она будет присутствовать в конечном представлении страницы.
Замечание: Контрольная точка
Теперь перейдите на "http://localhost" и посмотрите исходный код страницы. Вы должны увидеть XHTML заголовок, и элементы head, title, body.
Original (English): Zend Framework Quick Start. Create A Layout
Translation: © antdmi, Victor Gryshko .
