在用gridview时,大家都注意到了,列表的开头有现成的复选框,这肯定是批量操作中用到的,今天就来介绍一下,gridview中的批量操作,简直简单的不行,效果图如下:
前端页面只需要改这几个地方即可,
1、gridview设置options时增加一个id 这里我们命名grid。
2.columns增加选项复选框,批量删除必然不可少了复选框操作,这里我们的name值设定为id,方便对数据操作,代码如下
1 2 3 4 5 6 | 'options' =>[ 'id' => 'grid' ], 'columns' => [ [ 'class' => 'yii\grid\CheckboxColumn' , 'name' => 'id' , ], //复选框列 |
3、页面上我们增加一个批量删除按钮,注意这里我们增加了一个class gridviewdelete,方便后面js实现点击效果
1 | <?= Html::a( '批量删除' , "javascript:void(0);" , [ 'class' => 'btn btn-primary gridviewdelete' ]) ?> |
4、最后一步,写js实现按钮操作,我们很轻松的就拿到了选中的行的id,然后这里就可以异步操作数据了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $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传给控制器的是一个数组,这里我写了一个批量操作的方法,一块贴出来,这里的删除为逻辑删除
1 2 3 4 5 6 7 8 9 | 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为批量操作的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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中的一些使用方法也算是总结的差不多了,希望能帮助到大家!该睡觉了!
所有评论
加载评论 ...
发表评论