Для добавления колонки с чекбоксами необходимо в элемент columns виджета CGridView добавить следующий код:
array(
'name' => 'check',
'id' => 'selectedIds',
'value' => '$data->id',
'class' => 'CCheckBoxColumn',
'selectableRows' => '100',
),
Длее создать выпадающий список (select) с действиями для выбранных элементов:
<?php
echo CHtml::activeDropDownList( $model, 'attr', array(...), array('id' => 'newStatus') )
И кнопку для отправки данных в действие (action):
<?php
echo CHtml::ajaxLink( "Применить", $this->createUrl('myController/myAction'), array( //тип передачи данных "type" => "post", //данные для передачи "data" => 'js:{theIds : $.fn.yiiGridView.getChecked("CGridView-id","selectedIds").toString(),"status":$("#newStatus").val()}', //обновление контента после успешного выполнения запроса "success" => 'js:function(data){ $.fn.yiiGridView.update("CGridView-id") }' ) );
Далее создаем действие (action) для применения изменений. В действии мы получим строку со списком id выбранных записей и выбранное действие в переменной $_POST['status']. Список id можно превратить в массив с помощью explode:
$arr = explode(',', $_POST['theIds']);
Вместо выпадающего списка и кнопки можно создать несколько ссылок, каждая из которым будет отвечать за выбранное действие. Код такой ссылки будет выглядеть так:
echo CHtml::ajaxLink(
"Сделать что-то важное с отмеченными",
$this->createUrl('myController/myAction'),
array(
"type" => "post",
"data" => 'js:{theIds : $.fn.yiiGridView.getChecked("CGridView-id","selectedIds").toString()}',
"success" => 'js:function(data){ $.fn.yiiGridView.update("CGridView-id") }'), array(
'class' => 'btn btn-info'
)
);
Пример
К примеру у нас есть список комментариев для которых мы хотим сделать возможность массового изменения статуса публикации.
Код для представления(view):
<?php
//Код виджета $this->widget('zii.widgets.grid.CGridView', array( //id виджета, в дальнейшем будет использоваться для AJAX обновления данных 'id'=>'comments-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, //... 'columns'=> array( //колонка с чекбоксами (checkBoxes) array( 'name' => 'check', 'id' => 'selectedIds', 'value' => '$data->id', 'class' => 'CCheckBoxColumn', 'selectableRows' => '100', ), //остальные колонки array( 'name' => 'id', 'filter' => CHtml::activeTextField( $model, 'id', array('class' => 'form-control', 'placeholder' => 'ID') ) ), //... ) //... ));
?>
<!-- Select со списоком статусов и кнопка "Применить" --> <div class="form-inline"> <div class="form-group"> <label for="newStatus">С отмеченными: </label> <?php //select со списоком статусов echo CHtml::activeDropDownList( $model, 'status', array( '0' => 'Скрыть', '1' => 'Опубликовать' ), array( 'id' => 'newStatus', 'class' => 'form-control' ) ) ?> </div> <?php //кнопка отправки данных echo CHtml::ajaxLink( "Применить", $this->createUrl('/comments/changeStatus'), array( "type" => "post", "data" => 'js:{theIds : $.fn.yiiGridView.getChecked("comments-grid","selectedIds").toString(),"status":$("#newStatus").val()}', "success" => 'js:function(data){ $.fn.yiiGridView.update("comments-grid") }' ), array( 'class' => 'btn btn-info' ) ); ?> </div>
В контроллере (controller) описываем действие для применения изменений:
<?php
class CommentsController extends Controller { //... public function actionChangeStatus() { $arr = explode(',', $_POST['theIds']); $criteria = new CDbCriteria; $criteria->addInCondition('id' ,$arr); $model = Comments::model()->findAll($criteria); foreach ($model as $value) { $value->status = $_POST['status']; $value->update(); } } //... }
devreadwrite.com



Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
А нет ли такого примера на Yii2?
Ответить