Альтернативный язык шаблонов
Yii позволяет разработчику использовать свой любимый язык шаблонов (например,
Prado или Smarty) для описания представлений контроллера или виджета. Для этого
требуется написать и установить свой компонент viewRenderer.
Обработчик представления перехватывает вызовы CBaseController::renderFile,
компилирует файл представления с альтернативным синтаксисом и отдаёт результат
компиляции.
Информация: Не рекомендуется использовать альтернативный синтаксис шаблонов
для описания представлений компонентов, выкладываемых в открытый доступ. Это
приведёт к требованию использовать тот же синтаксис, что использован в представалении
компонента.
Далее мы покажем, как использовать CPradoViewRenderer — обработчик представлений,
позволяющий разработчику использовать синтаксис шаблонов, используемый в фреймворке
Prado. Если вы хотите реализовать свои обработчики
представлений, обязательно изучите CPradoViewRenderer.
Использование CPradoViewRenderer
Для использования CPradoViewRenderer необходимо настроить приложение
следующим образом:
return array(
'components'=>array(
…,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
По умолчанию CPradoViewRenderer будет компилировать исходные файлы представлений и
сохранять получаемые файлы PHP в директорию runtime.
PHP-файлы изменяются только в том случае, если изменено исходное представление.
Поэтому, использование CPradoViewRenderer влечёт за собой очень незначительное
падение производительности.
Подсказка: Несмотря на то, что CPradoViewRenderer добавляет новый синтаксис
для более быстрого и удобного описания представлений, вы можете использовать код
PHP также, как и в обычных представлениях.
Ниже будут описаны конструкции, поддерживаемые CPradoViewRenderer.
Сокращённые PHP-тэги
Сокращённые PHP-тэги — хороший способ сократить код, используемый в представлении.
Выражение <%= expression %> преобразуется в <?php echo expression ?>.
<% statement %> — в <?php statement ?>. К примеру:
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
преобразуется в
<?php echo CHtml::textField($name,'value'); ?>
<?php foreach($models as $model): ?>
Компонентные тэги
Компонентные тэги используются для того, чтобы вставить в представление
виджет. Синтаксис следующий:
<com:WidgetClass property1=value1 property2=value2 …>
</com:WidgetClass>
<com:WidgetClass property1=value1 property2=value2 …/>
Здесь WidgetClass определяет имя класса виджета или
псевдоним пути. Начальные значения свойств могут
быть как строками, заключенными в кавычки, так и выражениями PHP, заключёнными в
фигурные скобки. К примеру:
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
преобразуется в
<?php $this->widget('CCaptcha', array(
'captchaAction'=>'captcha',
'showRefreshButton'=>false)); ?>
Примечание: Значение showRefreshButton задано как {false}
вместо "false" так как последнее означает строку, а не логическое значение.
Кэширующие тэги
Кэширующие тэги — краткий способ использования
кэширования фрагментов. Синтаксис следующий:
<cache:fragmentID property1=value1 property2=value2 …>
</cache:fragmentID >
Здесь fragmentID — уникальный идентификатор кэшируемого объекта. Пары имя-значение
используются для настройки кэширования фрагментов. К примеру:
<cache:profile duration={3600}>
</cache:profile >
будет преобразовано в
<?php if($this->cache('profile', array('duration'=>3600))): ?>
<?php $this->endCache(); endif; ?>
Захватывающие тэги
Как и кэширующие тэги, захватывающие тэги — компактный способ использования
CBaseController::beginClip и CBaseController::endClip. Синтаксис следующий:
<clip:clipID>
</clip:clipID >
Здесь clipID — уникальный идентификатор захваченного содержимого.
Захватывающие тэги преобразуются следующим образом:
<?php $this->beginClip('clipID'); ?>
<?php $this->endClip(); ?>
Тэги комментариев
Тэги комментариев используются для написания комментариев, доступных исключительно
разработчикам. Данные тэги будут удалены непосредственно перед отображением
представления. Синтаксис следующий:
<!---
Этот комментарий будет вырезан… цензурой
--->
Одновременное использование шаблонов разного формата
Начиная с версии 1.1.2 возможно использовать одновременно как альтернативный, так и
обычный PHP синтаксис шаблонов. Для этого необходимо задать свойству обработчика
шаблонов CViewRenderer::fileExtension значение, отличное от .php.
К примеру, если оно будет выставлено в .tpl, то все шаблоны с расширением .tpl будут
обрабатываться выбранным обработчиком представлений. Шаблоны с расширением .php,
как и ранее, будут использовать стандартный синтаксис PHP.
$Id: topics.prado.txt 1983 2010-03-31 19:46:37Z qiang.xue $