0 follower

Альтернативный язык шаблонов

Yii позволяет разработчику использовать свой любимый язык шаблонов (например, Prado или Smarty) для описания представлений контроллера или виджета. Для этого требуется написать и установить свой компонент viewRenderer. Обработчик представления перехватывает вызовы CBaseController::renderFile, компилирует файл представления с альтернативным синтаксисом и отдаёт результат компиляции.

Информация: Не рекомендуется использовать альтернативный синтаксис шаблонов для описания представлений компонентов, выкладываемых в открытый доступ. Это приведёт к требованию использовать тот же синтаксис, что использован в представалении компонента.

Далее мы покажем, как использовать CPradoViewRenderer — обработчик представлений, позволяющий разработчику использовать синтаксис шаблонов, используемый в фреймворке Prado. Если вы хотите реализовать свои обработчики представлений, обязательно изучите CPradoViewRenderer.

1. Использование 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(); ?>

Тэги комментариев

Тэги комментариев используются для написания комментариев, доступных исключительно разработчикам. Данные тэги будут удалены непосредственно перед отображением представления. Синтаксис следующий:

<!---
Этот комментарий будет вырезан… цензурой
--->