在用gridview时,大家都注意到了,列表的开头有现成的复选框,这肯定是批量操作中用到的,今天就来介绍一下,gridview中的批量操作,简直简单的不行,效果图如下:
前端页面只需要改这几个地方即可,
1、gridview设置options时增加一个id 这里我们命名grid。
2.columns增加选项复选框,批量删除必然不可少了复选框操作,这里我们的name值设定为id,方便对数据操作,代码如下
'options' =>['id'=>'grid'],
'columns' => [
[
'class' => 'yiigridCheckboxColumn',
'name'=>'id',
],//复选框列
3、页面上我们增加一个批量删除按钮,注意这里我们增加了一个class gridviewdelete,方便后面js实现点击效果
<?= Html::a('批量删除', "javascript:void(0);", ['class' => 'btn btn-primary gridviewdelete']) ?>
4、最后一步,写js实现按钮操作,我们很轻松的就拿到了选中的行的id,然后这里就可以异步操作数据了。
$script = <<<SCRIPT
$(".gridviewdelete").on("click", function () {
if(confirm('您确定要删除吗?')){
var keys = $("#grid").yiiGridView("getSelectedRows");
$.ajax({
url: '/food/batchdelete',
data: {ids:keys},
type: 'post',
success: function (t) {
t = JSON.parse(t);
if (t.status == 1) {
window.location.href= window.location.href;
}
},
error: function () {
alert("删除失败!")
}
})
}
});
SCRIPT;
$this->registerJs($script);
?>
5.post传给控制器的是一个数组,这里我写了一个批量操作的方法,一块贴出来,这里的删除为逻辑删除
public function actionBatchdelete(){
$this->enableCsrfValidation = false;//去掉yii2的post验证
$ids = Yii::$app->request->post();
$model = new Product();
if($model->batchHandle($ids['ids']))
return yiihelpersJson::encode(['status'=>1,'info'=>'删除成功!']);
else
return false;
}
其中batchHandle为批量操作的方法:
public function batchHandle($ids = [],$status = 3){
foreach ($ids as $k=>$v){
$model = $this->has(['id'=>$v]);
$model->status = $status;
if(!$model->save(false))
return new BadRequestHttpException('操作失败!');
}
return true;
}
//其中has方法如下:
public function has($where=[], $field='*') {
$result = $this->_query
->select($field)
->where($where)
->one();
return empty($result) ? false : $result;
}
批量操作就这样完成了,是不是很简单,gridview中的一些使用方法也算是总结的差不多了,希望能帮助到大家!该睡觉了!