Оглавление

Начало Основы Работа с формами Работа с БД Кэширование Расширение Yii Тестирование Специальные темы
Зачем реклама?

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

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->beginCache('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.


Зачем реклама?