Альтернативна мова шаблонів

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->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(); ?>

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

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

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

2. Одночасне використання шаблонів різного формату

Починаючи з версії 1.1.2 можна використовувати одночасно як альтернативний, так і звичайний PHP синтаксис шаблонів. Для цього необхідно задати властивості обробника шаблонів CViewRenderer::fileExtension значення, відмінне від .php. Приміром, якщо воно буде виставлено у .tpl, то всі шаблони із розширенням .tpl будуть оброблятися обраним обробником представлень. Шаблони з розширенням .php, як і раніше, будуть використовувати стандартний синтаксис PHP.

Be the first person to leave a comment

Please to leave your comment.