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-тэги — хороший способ сократить код, используемый в представлении.
Выражение <%= expression %>
преобразуется в <?php echo expression ?>
.
<% statement %>
— в <?php statement ?>
. К примеру:
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
преобразуется в
echo CHtml::textField($name,'value'); 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} />
преобразуется в
$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 >
будет преобразовано в
if($this->cache('profile', array('duration'=>3600))): // информация из профиля пользователя $this->endCache(); endif;
Как и кэширующие тэги, захватывающие тэги — компактный способ использования CBaseController::beginClip и CBaseController::endClip. Синтаксис следующий:
<clip:clipID>
// содержимое для захвата
</clip:clipID >
Здесь clipID
— уникальный идентификатор захваченного содержимого.
Захватывающие тэги преобразуются следующим образом:
$this->beginClip('clipID'); // содержимое для захвата $this->endClip();
Тэги комментариев используются для написания комментариев, доступных исключительно разработчикам. Данные тэги будут удалены непосредственно перед отображением представления. Синтаксис следующий:
<!---
Этот комментарий будет вырезан… цензурой
--->
Signup or Login in order to comment.