Альтернативный язык шаблонов
============================
Yii позволяет разработчику использовать свой любимый язык шаблонов (например,
Prado или Smarty) для описания представлений контроллера или виджета. Для этого
требуется написать и установить свой компонент [viewRenderer|CWebApplication::viewRenderer].
Обработчик представления перехватывает вызовы [CBaseController::renderFile],
компилирует файл представления с альтернативным синтаксисом и отдаёт результат
компиляции.
> Info|Информация: Не рекомендуется использовать альтернативный синтаксис шаблонов
для описания представлений компонентов, выкладываемых в открытый доступ. Это
приведёт к требованию использовать тот же синтаксис, что использован в представлении
компонента.
Далее мы покажем, как использовать [CPradoViewRenderer] — обработчик представлений,
позволяющий разработчику использовать синтаксис шаблонов, используемый в фреймворке
[Prado](http://www.pradosoft.com/). Если вы хотите реализовать свои обработчики
представлений, обязательно изучите [CPradoViewRenderer].
Использование `CPradoViewRenderer`
----------------------------------
Для использования [CPradoViewRenderer] необходимо настроить приложение
следующим образом:
~~~
[php]
return array(
'components'=>array(
…,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
~~~
По умолчанию [CPradoViewRenderer] будет компилировать исходные файлы представлений и
сохранять получаемые файлы PHP в директорию [runtime](/doc/guide/basics.convention#directory).
PHP-файлы изменяются только в том случае, если изменено исходное представление.
Поэтому, использование [CPradoViewRenderer] влечёт за собой очень незначительное
падение производительности.
> Tip|Подсказка: Несмотря на то, что [CPradoViewRenderer] добавляет новый синтаксис
для более быстрого и удобного описания представлений, вы можете использовать код
PHP также, как и в обычных представлениях.
Ниже будут описаны конструкции, поддерживаемые [CPradoViewRenderer].
### Сокращённые PHP-тэги
Сокращённые PHP-тэги — хороший способ сократить код, используемый в представлении.
Выражение `<%= expression %>` преобразуется в ``.
`<% statement %>` — в ``. К примеру:
~~~
[php]
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
~~~
преобразуется в
~~~
[php]
~~~
### Компонентные тэги
Компонентные тэги используются для того, чтобы вставить в представление
[виджет](/doc/guide/basics.view#widget). Синтаксис следующий:
~~~
[php]
// содержимое виджета
// виджет без содержимого
~~~
Здесь `WidgetClass` определяет имя класса виджета или
[псевдоним пути](/doc/guide/basics.namespace). Начальные значения свойств могут
быть как строками, заключенными в кавычки, так и выражениями PHP, заключёнными в
фигурные скобки. К примеру:
~~~
[php]
~~~
преобразуется в
~~~
[php]
widget('CCaptcha', array(
'captchaAction'=>'captcha',
'showRefreshButton'=>false)); ?>
~~~
> Note|Примечание: Значение `showRefreshButton` задано как `{false}`
вместо `"false"` так как последнее означает строку, а не логическое значение.
### Кэширующие тэги
Кэширующие тэги — краткий способ использования
[кэширования фрагментов](/doc/guide/caching.fragment). Синтаксис следующий:
~~~
[php]
// содержимое, которое необходимо кэшировать
~~~
Здесь `fragmentID` — уникальный идентификатор кэшируемого объекта. Пары имя-значение
используются для настройки кэширования фрагментов. К примеру:
~~~
[php]
// информация из профиля пользователя
~~~
будет преобразовано в
~~~
[php]
beginCache('profile', array('duration'=>3600))): ?>
// информация из профиля пользователя
endCache(); endif; ?>
~~~
### Захватывающие тэги
Как и кэширующие тэги, захватывающие тэги — компактный способ использования
[CBaseController::beginClip] и [CBaseController::endClip]. Синтаксис следующий:
~~~
[php]
// содержимое для захвата
~~~
Здесь `clipID` — уникальный идентификатор захваченного содержимого.
Захватывающие тэги преобразуются следующим образом:
~~~
[php]
beginClip('clipID'); ?>
// содержимое для захвата
endClip(); ?>
~~~
### Тэги комментариев
Тэги комментариев используются для написания комментариев, доступных исключительно
разработчикам. Данные тэги будут удалены непосредственно перед отображением
представления. Синтаксис следующий:
~~~
[php]
~~~
Одновременное использование шаблонов разного формата
----------------------------------------------------
Начиная с версии 1.1.2 возможно использовать одновременно как альтернативный, так и
обычный PHP синтаксис шаблонов. Для этого необходимо задать свойству обработчика
шаблонов [CViewRenderer::fileExtension] значение, отличное от `.php`.
К примеру, если оно будет выставлено в `.tpl`, то все шаблоны с расширением `.tpl` будут
обрабатываться выбранным обработчиком представлений. Шаблоны с расширением `.php`,
как и ранее, будут использовать стандартный синтаксис PHP.