Для добавления колонки с чекбоксами необходимо в элемент 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(); } } //... }