yii2 批量删除

在yii中,是使用widget::GridView小部件做列表的,如果要使用checkbox,自己写估计要费一番周折,好在yii提供了CheckboxColumn, 这个类为我们提供了checkbox,我们可以直接使用。

'columns' => [
            [
                'class' => 'yii\grid\CheckboxColumn',
            ],

]

这样第一列的编号就显示为checkbox了

下面是添加批量删除按钮

我们可以使用table-footer,使用方法是

'showFooter'=>true,

'columns' => [
            [
                'class' => 'yii\grid\CheckboxColumn',
                
                'footer' => '<button data-control="news" onClick="delete_all(this)">'.Yii::t('common', 'delete_all').'</button>',
                'footerOptions' => ['colspan' => 3, 'class'=>'control'],
            ],

]

这样底部都会增加一行。

在使用colspan会出现问题, 因为GridView已经为我们生成了td,所以即使加上colspan,td个数还是不会减少,不过还好,网上有大神给出了解决方法,就是在某列下添加:

'footerOptions' => ['class'=>'hide'],

使用这个方法根据自己的表格和colspan选择隐藏多少列


<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'showFooter'=>true,
        'id' => 'grid_list',
        'columns' => [
            [
                'class' => 'yii\grid\CheckboxColumn',
                
                'footer' => '<button data-control="news" onClick="delete_all(this)">'.Yii::t('common', 'delete_all').'</button>',
                'footerOptions' => ['colspan' => 3, 'class'=>'control'],
            ],

            'id',
            'c.category',
            'title',
            //'content:ntext',
            //'image',
            // 'keywords',
            // 'description',
            [
                'attribute' => 'create_time',
                'format' => ['date', 'Y-m-d'],
                'footerOptions' => ['class'=>'hide'],
            ],
            // 'update_time:datetime',
            [
                'attribute' => 'status',
                'value' => function ($model) {
                    return $model->getStatus($model->status);
                },
                'footerOptions' => ['class'=>'hide'],
            ],
            // 'out_link',
             'sort',
             'click',
            // 'lang',

            [
                'class' => 'yii\grid\ActionColumn',
                'template' => '{update} {delete}',
            ],
        ],
    ]); ?>


接下来是点击按钮批量删除

在上面的footer中我使用了onClick="delete_all(obj)"

对应的js:

function delete_all(obj){
    var control = $(obj).attr('data-control');
    var ids = $("#grid_list").yiiGridView("getSelectedRows");
    var ids_str = ids.join(",");
    if(confirm('确认删除么?')){
        $.ajax({
           type: "POST",
           url: "/admin/index.php?r="+control+"%2Fajax-deleteall",
           data: "ids_str="+ids_str,
           dataType: 'json',
           success: function(msg){
             window.location.reload();
           }
        });
    }
    
}


control是因为我有几个地方使用到了批量删除,这里已news为例,在NewsController中添加action: actionAjaxDeleteall


/*
    * 批量删除
    */  
    public function actionAjaxDeleteall(){
        $model = new News();
        $condigtion = '';
        $ids_str = '';
        $ids_str = Yii::$app->request->post('ids_str');
        if(!empty($ids_str)){
            $condition = 'id in('.$ids_str.')';
            $lists = $model->find()->where($condition)->all();
            foreach ($lists as $key => $val) {
                //删除旧文件
                if(!empty($val['image'])){
                    @unlink(Yii::getAlias('@mywebroot') . '/' . $val['image']);
                }
            }
            $model->deleteAll($condition);
        }
        echo json_encode("ok");
    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值