在用gridview时,大家都注意到了,列表的开头有现成的复选框,这肯定是批量操作中用到的,今天就来介绍一下,gridview中的批量操作,简直简单的不行,效果图如下:
前端页面只需要改这几个地方即可,
1、gridview设置options时增加一个id 这里我们命名grid。
2.columns增加选项复选框,批量删除必然不可少了复选框操作,这里我们的name值设定为id,方便对数据操作,代码如下
'options' =>['id'=>'grid'], 'columns' => [ [ 'class' => 'yii\grid\CheckboxColumn', '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 \yii\helpers\Json::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中的一些使用方法也算是总结的差不多了,希望能帮助到大家!该睡觉了!