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

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 %>` перетворюється у `<?php echo expression ?>`.
`<% statement %>` — у `<?php statement ?>`. Приміром:

~~~
[php]
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
~~~

перетворюється у

~~~
[php]
<?php echo CHtml::textField($name,'value'); ?>
<?php foreach($models as $model): ?>
~~~

### Компонентні теги

Компонентні теги використовуються для того, щоб вставити у представлення
[віджет](/doc/guide/basics.view#widget). Синтаксис наступний:

~~~
[php]
<com:WidgetClass property1=value1 property2=value2 …>
	// вміст віджета
</com:WidgetClass>

// віджет без вмісту
<com:WidgetClass property1=value1 property2=value2 …/>
~~~

 
Тут `WidgetClass` визначає імʼя класу віджета або
[псевдонім шляху](/doc/guide/basics.namespace). 
Початкові значення властивостей можуть бути як рядками, укладеними у лапки,
так і виразами PHP, укладеними у фігурні дужки. Наприклад:

~~~
[php]
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
~~~

перетворюється у

~~~
[php]
<?php $this->widget('CCaptcha', array(
	'captchaAction'=>'captcha',
	'showRefreshButton'=>false)); ?>
~~~

> Note|Примітка: Значення `showRefreshButton` задано як `{false}`
замість `"false"` так як останнє означає рядок, а не логічне значення.

### Кешуючі теги

Кешуючі теги — короткий спосіб використання
[кешування фрагментів](/doc/guide/caching.fragment). Синтаксис наступний:

~~~
[php]
<cache:fragmentID property1=value1 property2=value2 …>
	// вміст, який необхідно кешувати
</cache:fragmentID >
~~~

Тут `fragmentID` — унікальний ідентифікатор кешувального обʼєкта.
Пари імʼя-значення використовуються для налаштування кешування фрагментів. Наприклад:

~~~
[php]
<cache:profile duration={3600}>
	// інформація із профілю користувача
</cache:profile >
~~~

буде перетворено у

~~~
[php]
<?php if($this->beginCache('profile', array('duration'=>3600))): ?>
	// інформація із профілю користувача
<?php $this->endCache(); endif; ?>
~~~

### Захоплюючі теги

Як і кешуючі теги, захоплюючі теги - компактний спосіб використання
[CBaseController::beginClip] та [CBaseController::endClip]. Синтаксис наступний:

~~~
[php]
<clip:clipID>
	// вміст для захоплення
</clip:clipID >
~~~

Тут `clipID` — унікальний ідентифікатор захопленого вмісту.
Захоплюючі теги перетворюються таким чином:

~~~
[php]
<?php $this->beginClip('clipID'); ?>
	// вміст для захоплення
<?php $this->endClip(); ?>
~~~

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

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

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

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

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