Альтернативна мова шаблонів
===========================
Yii дозволяє розробнику використовувати свою улюблену мову шаблонів (наприклад, Prado або Smarty)
для опису представлень контролера або віджету.
Для цього потрібно написати і встановити свій компонент [viewRenderer|CWebApplication::viewRenderer].
Обробник представлення перехоплює виклики [CBaseController::renderFile],
компілює файл представлення з альтернативним синтаксисом і віддає результат компіляції.
> Info|Інформація: Не рекомендується використовувати альтернативний синтаксис шаблонів для опису представлень компонентів, які викладаються у відкритий доступ. Це призведе до вимоги використовувати той же синтаксис, що використовується у представленні компонента.
Далі ми покажемо, як використовувати [CPradoViewRenderer] — обробник представлень,
що дозволяє розробнику використовувати синтаксис шаблонів, який використовується у фреймворку
[Prado](http://www.pradosoft.com/). Якщо ви хочете реалізувати свої обробники представлень, обовʼязково ознайомтеся із [CPradoViewRenderer].
Використання `CPradoViewRenderer`
---------------------------------
Для використання [CPradoViewRenderer] необхідно налаштувати додаток наступним чином:
~~~
[php]
return array(
'components'=>array(
…,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
~~~
За замовчуванням [CPradoViewRenderer] буде компілювати вихідні файли представлень і зберігати отримані файли PHP в директорію [runtime](/doc/guide/basics.convention#directory).
PHP-файли змінюються тільки у тому випадку, якщо змінено вихідне представлення.
Тому, використання [CPradoViewRenderer] тягне за собою дуже незначне падіння продуктивності.
> Tip|Підказка: Незважаючи на те, що [CPradoViewRenderer] додає новий синтаксис для більш швидкого і зручного опису представлень, ви можете використовувати код PHP також, як і у звичайних представленнях.
Нижче будуть описані конструкції, які підтримуються [CPradoViewRenderer].
### Скорочені PHP-теги
Скорочені PHP-теги — гарний спосіб скоротити код, який використовується у представленні.
Вираз `<%= expression %>` перетворюється у ``.
`<% statement %>` — у ``. Приміром:
~~~
[php]
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
~~~
перетворюється у
~~~
[php]
~~~
### Компонентні теги
Компонентні теги використовуються для того, щоб вставити у представлення
[віджет](/doc/guide/basics.view#widget). Синтаксис наступний:
~~~
[php]
// вміст віджета
// віджет без вмісту
~~~
Тут `WidgetClass` визначає імʼя класу віджета або
[псевдонім шляху](/doc/guide/basics.namespace).
Початкові значення властивостей можуть бути як рядками, укладеними у лапки,
так і виразами PHP, укладеними у фігурні дужки. Наприклад:
~~~
[php]
~~~
перетворюється у
~~~
[php]
widget('CCaptcha', array(
'captchaAction'=>'captcha',
'showRefreshButton'=>false)); ?>
~~~
> Note|Примітка: Значення `showRefreshButton` задано як `{false}`
замість `"false"` так як останнє означає рядок, а не логічне значення.
### Кешуючі теги
Кешуючі теги — короткий спосіб використання
[кешування фрагментів](/doc/guide/caching.fragment). Синтаксис наступний:
~~~
[php]
// вміст, який необхідно кешувати
~~~
Тут `fragmentID` — унікальний ідентифікатор кешувального обʼєкта.
Пари імʼя-значення використовуються для налаштування кешування фрагментів. Наприклад:
~~~
[php]
// інформація із профілю користувача
~~~
буде перетворено у
~~~
[php]
beginCache('profile', array('duration'=>3600))): ?>
// інформація із профілю користувача
endCache(); endif; ?>
~~~
### Захоплюючі теги
Як і кешуючі теги, захоплюючі теги - компактний спосіб використання
[CBaseController::beginClip] та [CBaseController::endClip]. Синтаксис наступний:
~~~
[php]
// вміст для захоплення
~~~
Тут `clipID` — унікальний ідентифікатор захопленого вмісту.
Захоплюючі теги перетворюються таким чином:
~~~
[php]
beginClip('clipID'); ?>
// вміст для захоплення
endClip(); ?>
~~~
### Теги коментарів
Теги коментарів використовуються для написання коментарів, доступних виключно розробникам.
Дані теги будуть видалені безпосередньо перед відображенням представлення. Синтаксис наступний:
~~~
[php]
~~~
Одночасне використання шаблонів різного формату
-----------------------------------------------
Починаючи з версії 1.1.2 можна використовувати одночасно як альтернативний, так і звичайний PHP синтаксис шаблонів.
Для цього необхідно задати властивості обробника шаблонів [CViewRenderer::fileExtension] значення, відмінне від `.php`.
Приміром, якщо воно буде виставлено у `.tpl`, то всі шаблони із розширенням `.tpl` будуть оброблятися обраним обробником представлень. Шаблони з розширенням `.php`, як і раніше, будуть використовувати стандартний синтаксис PHP.