Создание своего виджета в Yii

В этой статье я расскажу, как создать свой виджет (widget) в Yii.

В директории extensions создадим папку mywidgets. В ней мы будем хранить все виджеты, сделанные непосредственно нами.

Далее, в папке mywidgets создадим папку views, где будем хранить вьюсы для наших виджетов.

Как и у контроллера, у виджета может быть собственное представление. По умолчанию файлы представлений виджета находятся в поддиректории views директории, содержащей файл класса виджета. Эти представления можно рендерить при помощи вызова CWidget::render() точно так же, как и в случае с контроллером. Единственное отличие состоит в том, что для представления виджета не используются макеты. Также следует отметить, что $this в представлении указывает на экземпляр виджета, а не на экземпляр контроллера.

В папке views, создаим файл вида goper.php

Итак, прнивожу пример своего виджета:

class Goper extends CWidget{
    // этот метод будет вызван внутри CBaseController::endWidget()
    public function run()
    {
    	// можель формы
        $model = new Login;
        // этот метод будет вызван внутри CBaseController::beginWidget()
        $this->render('goper',  array('model' => $model));
    }
}

Файл вида goper.php

<div class="form">
    <? $form=$this->beginWidget('CActiveForm', array(
        'id'=>'login-form',
        'enableClientValidation'=>true,
        'action' => 'site/login',
        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),
    )); ?>
 
    <p class="note">Поля с <span class="required">*</span> обязательны для заполнения.</p>
 
    <?=$form->errorSummary($model); ?>
 
    <div class="row">
        <?=$form->labelEx($model,'username'); ?>
        <?=$form->textField($model,'username'); ?>
        <?=$form->error($model,'username'); ?>
    </div>
 
    <div class="row">
        <?=$form->labelEx($model,'password'); ?>
        <?=$form->passwordField($model,'password'); ?>
        <?=$form->error($model,'password'); ?>
    </div>
 
    <div class="row rememberMe">
        <?=$form->checkBox($model,'rememberMe'); ?>
        <?=$form->label($model,'rememberMe'); ?>
        <?=$form->error($model,'rememberMe'); ?>
    </div>
 
    <div class="row buttons">
        <?php echo CHtml::submitButton('Login'); ?>
    </div>
 
    <? $this->endWidget(); ?>
</div><!-- form -->

Вставка виджета.

$this->widget('ext.mywidgets.Goper');

Вот и всё.
Теги:
виджет
Добавлено: 20 Апреля 2018 18:43:40 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...