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.