|
|||||||
Что такое виджет в фреймверке Yii 1.x.x
Время создания: 25.09.2014 00:06
Текстовые метки: Yii, виджет, widget
Раздел: Компьютер - Программирование - Язык PHP - Yii
Запись: xintrea/mytetra_syncro/master/base/1411589184aans0iscvt/text.html на raw.github.com
|
|||||||
|
|||||||
Виджет Виджет (widget) — это экземпляр класса CWidget или унаследованного от него. Это компонент, применяемый, в основном, с целью оформления. Виджеты обычно встраиваются в представления для формирования некоторой сложной, но в то же время самостоятельной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга сложного интерфейса календаря. Виджеты позволяют повторно использовать код пользовательского интерфейса. Виджеты по своей сути ближе к контроллерам. Чаще всего виджеты вызываются из представлений. Пример вызова простого виджета из представления: <?php $this->widget('path.to.WidgetClass'); ?> Но так же, виджеты могут иметь и собственное содержание. Для использования такого виджета необходимо обозначить в коде начало и конец размещения виджета: <?php $this->beginWidget('path.to.WidgetClass'); ?> …некое содержимое, которое может быть использовано виджетом… <?php $this->endWidget(); ?> Изменить поведение виджета можно путём установки начальных значений его свойств при вызове CBaseController::beginWidget или CBaseController::widget. Например, при использовании виджета CMaskedTextField можно указать используемую маску, передав массив начальных значений свойств как показано ниже, где ключи массива являются именами свойств, а значения — начальными значениями соответствующих им свойств виджета: <?php $this->widget('CMaskedTextField',array( 'mask'=>'99/99/9999' )); ?> Чтобы создать новый виджет, необходимо расширить класс CWidget и переопределить его методы init() и run(): class CMyWidget extends CWidget { public function init() { // этот метод будет вызван внутри CBaseController::beginWidget() }
public function run() { // этот метод будет вызван внутри CBaseController::endWidget() } } Как и у контроллера, у виджета может быть собственное представление. По умолчанию файлы представлений виджета находятся в поддиректории views директории, содержащей файл класса виджета. Эти представления можно рендерить при помощи вызова CWidget::render() точно так же, как и в случае с контроллером. Единственное отличие состоит в том, что для представления виджета не используются макеты. Внимание! Следует отметить, что $this в представлении указывает на экземпляр виджета, а не на экземпляр контроллера. Подсказка: свойство CWidgetFactory::widgets может быть использовано для настройки умолчаний для отдельных виджетов во всём приложении. Подробнее об этом можно прочитать в разделе «Темы оформления, глобальная настройка виджетов». Параметры виджета Как было сказано выше, виджет может быть вызван с параметрами. Классический пример из документации: $this->widget('MyWidget', array('params'=>array( 'mask'=>'99/99/9999', 'title'=>'Введите дату',))); Где mask и title - это параметры виджета. В виджете параметры попадут в публичное свойство с именем $this->params. Поэтому такое свойство нужно описать в виджете, иначе будет ошибка. Пример: class MyWidget extends CWidget { // свойство $params - массив параметров виджета public $params = array( 'mask'=>'11/11/1111', // Тут задано значение по-умолчанию 'title', );
public function run() { // передаем сразу весь массив параметров в представление $this->render('drawData',array('params' => $this->params)); } } Упрощенный вариант Параметры виджета не обязательно держать в одном массиве. Можно делать и отдельные параметры. Обращение к виджету: $this->widget('MyWidget', array('mask'=>'99/99/9999', 'title'=>'Введите дату') ); Код виджета class MyWidget extends CWidget { // Свойства виджета public $mask='11/11/1111'; // Тут задано значение по-умолчанию public $title;
public function run() { $this->render('drawTitle',array('title' => $this->title)); } } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|