Files
yii/docs/guide/ru/basics.view.txt
2012-03-05 20:37:50 -05:00

146 lines
9.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Представление
=============
Представление — это 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()
{
// этот метод будет вызван внутри CBaseController::beginWidget()
}
public function run()
{
// этот метод будет вызван внутри CBaseController::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>