mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 16:16:53 +01:00
136 lines
9.1 KiB
Plaintext
136 lines
9.1 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 2367 2010-08-29 17:29:22Z qiang.xue $</div> |