mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 19:16:54 +01:00
145 lines
9.0 KiB
Plaintext
145 lines
9.0 KiB
Plaintext
Представлення
|
||
=============
|
||
Представлення — це PHP-скрипт, який складається переважно з елементів
|
||
користувальницького інтерфейсу. Він може охоплювати вирази PHP, проте рекомендується,
|
||
щоб ці вирази не змінювали дані і залишалися відносно простими.
|
||
Згідно концепції розділення логіки та представлення, більша частина коду логіки
|
||
повинна бути розміщена у контролері або моделі, а не у скрипті представлення.
|
||
|
||
Представлення має іʼмя, яке використовуєтся, щоб ідентифікувати файл
|
||
скрипта представлення у процесі рендеринга. Іʼмя представлення повинно співпадати
|
||
із назвою файла представлення. Наприклад, для представлення `edit`
|
||
відповідний файл скрипта повинен називатися `edit.php`. Щоб відобразити
|
||
представлення необхідно викликати метод [CController::render()], вказавши імʼя представлення.
|
||
При цьому метод спробує виявити відповідний файл у директорії `protected/views/ControllerID`.
|
||
|
||
Всередині скрипта представлення екземпляр контролера доступний через `$this`.
|
||
Таким чином, ми можемо звернутися до властивостей контролера із кода представлення:
|
||
`$this->propertyName`.
|
||
|
||
Крім того, ми можемо використовувати наступний спосіб для передачі даних представленню:
|
||
|
||
~~~
|
||
[php]
|
||
$this->render('edit', array(
|
||
'var1'=>$value1,
|
||
'var2'=>$value2,
|
||
));
|
||
~~~
|
||
|
||
У наведеному коді метод [render()|CController::render] витягне другий параметр —
|
||
масив — у змінні. Як результат, у коді скрипта представлення можна
|
||
звертатися до локальних змінних `$var1` та `$var2`.
|
||
|
||
Макет
|
||
----------
|
||
Макет (layout) — це спеціальне представлення для декорування інших представлень.
|
||
Макет звичайно містить частини користувальницького інтерфейсу, загальні для інших представлень.
|
||
Наприклад, макет може містити верхню та нижню частини сторінки, укладаючи між ними
|
||
зміст іншого представлення:
|
||
|
||
~~~
|
||
[php]
|
||
…тут верхня частина…
|
||
<?php echo $content; ?>
|
||
…тут нижня…
|
||
~~~
|
||
|
||
У цьому місці `$content` зберігає результати рендеринга представлення.
|
||
|
||
Макет застосовується неявно при виклику метода [render()|CController::render].
|
||
За замовчуванням, у якості макета використовується представлення
|
||
`protected/views/layouts/main.php`. Це можна змінити шляхом встановлення значень
|
||
[CWebApplication::layout] або [CController::layout]. Для рендерингу представлення
|
||
без застосування макету необхідно викликати [renderPartial()|CController::renderPartial].
|
||
|
||
|
||
Віджет
|
||
------
|
||
|
||
Віджет (widget) — це екземпляр класу [CWidget] або успадкований від нього.
|
||
Це компонент, який застосовується в основном з метою оформлення. Віджети звичайно
|
||
вбудовують у скрипт представлення для генерації деякої складної, але в той же час,
|
||
самостійної частини користувальницького інтерфейсу. Наприклад, віджет календаря
|
||
може бути використаний для рендерингу складного інтерфейса календаря.
|
||
Віджети дозволяють повторно використовувати код користувальницького інтерфейсу.
|
||
|
||
Для використання віджету необхідно виконати у коді:
|
||
|
||
~~~
|
||
[php]
|
||
<?php $this->beginWidget('path.to.WidgetClass'); ?>
|
||
…деякий вміст, який може бути використаний віджетом…
|
||
<?php $this->endWidget(); ?>
|
||
~~~
|
||
|
||
або
|
||
|
||
~~~
|
||
[php]
|
||
<?php $this->widget('path.to.WidgetClass'); ?>
|
||
~~~
|
||
|
||
В останньому варіанті для використання віджету не потрібно додаткового вмісту.
|
||
|
||
У випадку, якщо поведінку віджета необхідно змінити, можна виконати це шляхом
|
||
встановлення початкових значень його властивостей при виклику
|
||
[CBaseController::beginWidget] або [CBaseController::widget].
|
||
Наприклад, при використанні віджету [CMaskedTextField] можна вказувати використовувану маску,
|
||
передавши масив початкових значень властивостей, як показано нижче, де ключі масиву
|
||
є іменами властивостей, а значення — початковими значеннями відповідних їм властивостей віджета:
|
||
|
||
~~~
|
||
[php]
|
||
<?php
|
||
$this->widget('CMaskedTextField',array(
|
||
'mask'=>'99/99/9999'
|
||
));
|
||
?>
|
||
~~~
|
||
|
||
Щоб створити новий віджет необхідно розширити клас [CWidget] и перевизначити
|
||
його методи [init()|CWidget::init] та [run()|CWidget::run]:
|
||
|
||
~~~
|
||
[php]
|
||
class MyWidget extends CWidget
|
||
{
|
||
public function init()
|
||
{
|
||
// цей метод буде викликаний методом CController::beginWidget()
|
||
}
|
||
|
||
public function run()
|
||
{
|
||
// цей метод буде викликаний методом CController::endWidget()
|
||
}
|
||
}
|
||
~~~
|
||
|
||
Як і у контролера, у віджета може бути власне представлення.
|
||
За замовчуванням, файли представлень віджету знаходяться у піддиректорії
|
||
`views` директорії, яка містить файл класу віджета. Ці представлення можна рендерити
|
||
за допомогою виклику [CWidget::render()], точно так, як і у випадку із контролером.
|
||
Єдина різниця полягає у тому, що для представлення віджету не використовуються макети.
|
||
Також, `$this` в представленні вказує на екземпляр віджета, а не на екземпляр
|
||
контролера.
|
||
|
||
Системні представлення
|
||
----------------------
|
||
Системні представлення відносяться до представлень, які використовуються Yii для
|
||
відображення помилок та інформації лога. Наприклад, коли користувач запитує
|
||
неіснуючий контролер або дію, Yii згенерує виключення, яке розкриває
|
||
суть помилки. Таке виключення буде відображено за допомогою системного представлення.
|
||
|
||
Іменування системних представлень підпорядковується деяким правилам.
|
||
Імена типу `errorXXX` відносяться до представлень, які служать для
|
||
відображення [CHttpException] з кодом помилки `XXX`.
|
||
Наприклад, якщо виключення [CHttpException] згенеровано із кодом помилки 404,
|
||
буде використане представлення `error404`.
|
||
|
||
Yii надає стандартний набір системних представлень, розташованих у
|
||
`framework/views`. Їх можні змінити, створивши файли представлень з
|
||
тими же назвами у директорії `protected/views/system`.
|
||
|
||
<div class="revision">$Id: basics.view.txt 3251 2011-06-01 00:24:06Z qiang.xue $</div> |