Альтернативный язык шаблонов ============================ 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.