0 follower

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

Представление — это 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(), точно также как и в случае с контроллером. Единственная разница состоит в том, что для представления виджета не используются макеты.

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

Системные представления (system view) относятся к представлениям, используемым Yii для отображения ошибок и информации лога. Например, когда пользователь запрашивает несуществующий контроллер или действие, Yii сгенерирует исключение, раскрывающее суть ошибки. Такое исключение будет отображено с помощью системного представления.

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

Yii предоставляет стандартный набор системных представлений, расположенных в framework/views. Их можно видоизменить путем создания файлов представлений с теми же названиям в директории protected/views/system.