Альтернативна мова шаблонів =========================== 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.