Альтернативный язык шаблонов

Yii позволяет разработчику использовать свой любимый язык шаблонов (например, Prado или Smarty) для описания представлений контроллера или виджета. Для этого требуется написать и установить свой компонент viewRenderer. Обработчик представления перехватывает вызовы CBaseController::renderFile, компилирует файл представления с альтернативным синтаксисом и отдаёт результат компиляции.

Информация: Не рекомендуется использовать альтернативный синтаксис шаблонов для описания представлений компонентов, выкладываемых в открытый доступ. Это приведёт к требованию использовать тот же синтаксис, что использован в представлении компонента.

Далее мы покажем, как использовать CPradoViewRenderer — обработчик представлений, позволяющий разработчику использовать синтаксис шаблонов, используемый в фреймворке Prado. Если вы хотите реализовать свои обработчики представлений, обязательно изучите CPradoViewRenderer.

Использование CPradoViewRenderer

Для использования CPradoViewRenderer необходимо настроить приложение следующим образом:



По умолчанию CPradoViewRenderer будет компилировать исходные файлы представлений и сохранять получаемые файлы PHP в директорию runtime. PHP-файлы изменяются только в том случае, если изменено исходное представление. Поэтому, использование CPradoViewRenderer влечёт за собой очень незначительное падение производительности.

Подсказка: Несмотря на то, что CPradoViewRenderer добавляет новый синтаксис для более быстрого и удобного описания представлений, вы можете использовать код PHP также, как и в обычных представлениях.

Ниже будут описаны конструкции, поддерживаемые CPradoViewRenderer.

Сокращённые PHP-тэги

Сокращённые PHP-тэги — хороший способ сократить код, используемый в представлении. Выражение <%= expression %> преобразуется в <?php echo expression ?>. <% statement %> — в <?php statement ?>. К примеру:



преобразуется в



Компонентные тэги

Компонентные тэги используются для того, чтобы вставить в представление виджет. Синтаксис следующий:



Здесь WidgetClass определяет имя класса виджета или псевдоним пути. Начальные значения свойств могут быть как строками, заключенными в кавычки, так и выражениями PHP, заключёнными в фигурные скобки. К примеру:



преобразуется в



Примечание: Значение showRefreshButton задано как {false} вместо "false" так как последнее означает строку, а не логическое значение.

Кэширующие тэги

Кэширующие тэги — краткий способ использования кэширования фрагментов. Синтаксис следующий:



Здесь fragmentID — уникальный идентификатор кэшируемого объекта. Пары имя-значение используются для настройки кэширования фрагментов. К примеру:



будет преобразовано в



Захватывающие тэги

Как и кэширующие тэги, захватывающие тэги — компактный способ использования CBaseController::beginClip и CBaseController::endClip. Синтаксис следующий:



Здесь clipID — уникальный идентификатор захваченного содержимого. Захватывающие тэги преобразуются следующим образом:



Тэги комментариев

Тэги комментариев используются для написания комментариев, доступных исключительно разработчикам. Данные тэги будут удалены непосредственно перед отображением представления. Синтаксис следующий:



Одновременное использование шаблонов разного формата

Начиная с версии 1.1.2 возможно использовать одновременно как альтернативный, так и обычный PHP синтаксис шаблонов. Для этого необходимо задать свойству обработчика шаблонов CViewRenderer::fileExtension значение, отличное от .php. К примеру, если оно будет выставлено в .tpl, то все шаблоны с расширением .tpl будут обрабатываться выбранным обработчиком представлений. Шаблоны с расширением .php, как и ранее, будут использовать стандартный синтаксис PHP.