Представлення

Представлення — це PHP-скрипт, який складається переважно з елементів користувальницького інтерфейсу. Він може охоплювати вирази PHP, проте рекомендується, щоб ці вирази не змінювали дані і залишалися відносно простими. Згідно концепції розділення логіки та представлення, більша частина коду логіки повинна бути розміщена у контролері або моделі, а не у скрипті представлення.

Представлення має іʼмя, яке використовуєтся, щоб ідентифікувати файл скрипта представлення у процесі рендеринга. Іʼмя представлення повинно співпадати із назвою файла представлення. Наприклад, для представлення edit відповідний файл скрипта повинен називатися edit.php. Щоб відобразити представлення необхідно викликати метод CController::render(), вказавши імʼя представлення. При цьому метод спробує виявити відповідний файл у директорії protected/views/ControllerID.

Всередині скрипта представлення екземпляр контролера доступний через $this. Таким чином, ми можемо звернутися до властивостей контролера із кода представлення: $this->propertyName.

Крім того, ми можемо використовувати наступний спосіб для передачі даних представленню:

$this->render('edit', array(
    'var1'=>$value1,
    'var2'=>$value2,
));

У наведеному коді метод render() витягне другий параметр — масив — у змінні. Як результат, у коді скрипта представлення можна звертатися до локальних змінних $var1 та $var2.

1. Макет

Макет (layout) — це спеціальне представлення для декорування інших представлень. Макет звичайно містить частини користувальницького інтерфейсу, загальні для інших представлень. Наприклад, макет може містити верхню та нижню частини сторінки, укладаючи між ними зміст іншого представлення:

…тут верхня частина…
<?php echo $content; ?>
…тут нижня…

У цьому місці $content зберігає результати рендеринга представлення.

Макет застосовується неявно при виклиці метода render(). За замовчуванням, у якості макета використовується представлення protected/views/layouts/main.php. Це можна змінити шляхом встановлення значень CWebApplication::layout або CController::layout. Для рендерингу представлення без застосування макету необхідно викликати renderPartial().

2. Віджет

Віджет (widget) — це екземпляр класу CWidget або успадкований від нього. Це компонент, який застосовується в основному з метою оформлення. Віджети звичайно вбудовують у скрипт представлення для генерації деякої складної, але в той же час, самостійної частини користувальницького інтерфейсу. Наприклад, віджет календаря може бути використаний для рендерингу складного інтерфейса календаря. Віджети дозволяють повторно використовувати код користувальницького інтерфейсу.

Для використання віджету необхідно виконати у коді:

<?php $this->beginWidget('path.to.WidgetClass'); ?>
…деякий вміст, який може бути використаний віджетом…
<?php $this->endWidget(); ?>

або

<?php $this->widget('path.to.WidgetClass'); ?>

В останньому варіанті для використання віджету не потрібно додаткового вмісту.

У випадку, якщо поведінку віджета необхідно змінити, можна виконати це шляхом встановлення початкових значень його властивостей при виклиці CBaseController::beginWidget або CBaseController::widget. Наприклад, при використанні віджету CMaskedTextField можна вказувати використовувану маску, передавши масив початкових значень властивостей, як показано нижче, де ключі масиву є іменами властивостей, а значення — початковими значеннями відповідних їм властивостей віджета:

<?php
$this->widget('CMaskedTextField',array(
    'mask'=>'99/99/9999'
));
?>

Щоб створити новий віджет необхідно розширити клас CWidget и перевизначити його методи init() та run():

class MyWidget extends CWidget
{
    public function init()
    {
        // цей метод буде викликаний методом CController::beginWidget()
    }
 
    public function run()
    {
        // цей метод буде викликаний методом CController::endWidget()
    }
}

Як і у контролера, у віджета може бути власне представлення. За замовчуванням, файли представлень віджета знаходяться у піддиректорії views директорії, яка містить файл класу віджета. Ці представлення можна рендерити за допомогою виклику CWidget::render(), точно так, як і у випадку із контролером. Єдина різниця полягає у тому, що для представлення віджета не використовуються макети. Також, $this в представленні вказує на екземпляр віджета, а не на екземпляр контролера.

Підказка: властивість CWidgetFactory::widgets може бути використана для налаштування замовчувань для окремих віджетів у всьому додатку. Детальніше про це можна прочитати у розділі «Теми оформлення» (Глобальне налаштування віджетів)

3. Системні представлення

Системні представлення відносяться до представлень, які використовуються Yii для відображення помилок та інформації логів. Наприклад, коли користувач запитує неіснуючий контролер або дію, Yii згенерує виключення, яке розкриває суть помилки. Таке виключення буде відображено за допомогою системного представлення.

Іменування системних представлень підпорядковується деяким правилам. Імена типу errorXXX відносяться до представлень, які служать для відображення CHttpException з кодом помилки XXX. Наприклад, якщо виключення CHttpException згенеровано із кодом помилки 404, буде використане представлення error404.

Yii надає стандартний набір системних представлень, розташованих у framework/views. Їх можна змінити, створивши файли представлень з тими ж назвами у директорії protected/views/system.

Be the first person to leave a comment

Please to leave your comment.