Zend_Layout — один из важнейших компонентов Zend Framework. Компонент очень простой, но многие не правильно понимают его предназначение либо и вовсе не знают что это такое. Так вот, данная статья просто и доходчиво объясняет следующее:
- Что такое Zend_Layout;
- Для чего он нужен;
- В чем разница между Zend_Layout и Zend_View;
- Реальные примеры использования.
Что такое Zend_Layout и для чего он нужен?
Zend_Layout — мощный инструмент в руках профессионального программиста. Этот инструмент позволяет четко поделить Вашу View логику на две части: шаблоны и скрипты вида. Что это Вам дает?
- Вы получаете прозрачный механизм шаблонизации
- Вы сможете избежать повторения кода в Ваших скриптах вида
- Получите возможность менять шаблоны на лету
- Сможете более удобным образом использовать head* помощники вида
Поэтому для большинства проектов я настоятельно рекомендую Вам использовать Zend_Layout. Конечно, всю мощь и удобство данного подхода никакая статья Вам не объяснит — Вы должны обязательно сами все опробовать!
В чем разница между Zend_Layout и Zend_View
При использовании Zend_View, Вы вероятнее всего создаете несколько скриптов вида, для того, чтобы использовать одинаковое оформление для однотипных страниц, потом Вы подключаете эти скрипты вида в конкретные скрипты, выводящие весь контент, не так ли?
Zend_Layout делает эти операции за Вас! Вы создаете скрипт шаблона, потом скрипт вида. Zend_Layout собирает для Вас шаблон и вставляет в него срендеренный скрипт вида в указанное Вами место (при этом не стоит считать, что Zend_View вообще не работает потому, что это не так. Именно Zend_View рендерит, как и прежде Ваши скрипты вида, а Zend_Layout «перехватывает» их вставляя в шаблон). Это оказывается очень удобным инструментом, особенно при разработке крупных портальных проектов. Ну что, я Вас уже заинтересовал? Тогда читайте дальше, и я расскажу Вам в виде практических примеров как именно все это добро использовать.
Реальные примеры использования
Итак, давайте опробуем все вышесказанное на практике. Начнем с Вашего загрузочного файла (bootstrap).
Чтобы включить поддержку Zend_Layout Вам нужно настроить этот компонент.
Впишите следующие строчки в Ваш бутстрап (до вызова метода dispatch() front-контроллера):
Честно признаться это не единственный способ сконфигурировать Zend_Layout, но, ИМХО, самый удобный.
С помощью опций конфигурации (см. мануал) можно многое поменять в работе шаблонизатора, например, сменить расширение Ваших шаблонов с phtml на tpl. Это очень просто и доходчиво расписано в мануале, поэтому на этом останавливаться не буду, потому, что нужно объяснить и более важные вещи.
Теперь нужно написать скрипт шаблона. Это проще чем Вы думаете. Итак, предпримем такие шаги:
- Откройте папку, которую Вы указали в бутстрапе
- Создайте в ней файл index.phtml
- Откройте файл index.phtml и для теста вставьте в него следующее:
В данном примере активно использовались помощники вида, ценность которых в шаблоне Вы несомненно оцените позже. В шаблоне Вы также работаете в контексте Zend_View, что означает, что переменная $this это объект Zend_View. $this->layout() - это объект Zend_Layout, где $this->layout()->content — содержимое срендеренного скрипта вида.
Вы также можете хранить переменные доступные из любого скрипта вида с помощью Zend_Layout.
Принцип создания скриптов вида остается таким же, только Вам теперь не нужно подключать кучу разных header и footer скриптов вида. Вот пример простого скрипта вида:
Теперь, если мы попадем в контроллер и действие, для которого мы создали скрипт вида, в браузер нам вернется следующий код:
Т.е. как видите, сначала рендерится скрипт вида, потом рендерится шаблон, и уже при рендеринге шаблона вставляется содержимое срендеренного скрипта вида.
А если Вы обратите внимание на помощники вида, использованные в примерах, то Вы лучше поймете целесообразность использования такого подхода.
Спасибо за внимание.





