Files
yii/docs/guide/ru/basics.view.txt
2010-11-14 14:17:44 +00:00

136 lines
9.1 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()
{
// этот метод будет вызван методом 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>