Зміст

Початок Основи Робота з формами Робота з БД Кешування Розширення 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.


Для чого реклама?