yii2中的gridview复选框多删除

时间:2018-02-16 12:27:53

标签: model-view-controller yii2 yii2-basic-app

我只想拥有一个gridview,每行前面有一个复选框列,我的管理员可以通过全部检查删除行,或者检查一个或检查他们有多少箱子,然后点击删除按钮所有选中的行从他们的观点

在后面重要的是将他们的删除列更新为1行而不删除

这是我删除一个id的代码

控制器(忽略波斯语)

    public function actionDelete($id=[])
    {
    $model = \Yii::$app->db->createCommand()
        ->update('tbl_post',['Delete'=>1],['id'=>$id])->execute();

    if($model==true){
        \Yii::$app->session->setFlash('با موفقیت نیست شد');
    }else{
        \Yii::$app->session->setFlash('با موفقیت نیست نشد');
    }
    return $this->redirect('index');
    }

这里是视图(忽略波斯语)

//in baraye ine ke form taiid shod payam bede
foreach (Yii::$app->session->getAllFlashes() as $key => $message) {
    echo '<div class="alert alert-' . $message . '">' . $key . '</div>';
}
//-------------------------table it self
echo \yii\grid\GridView::widget([
    'dataProvider' => $adp,
    'caption' => 'لیست تمامی محتوا ها',
    'captionOptions' => ['id' => 'atro-caption'],
    'headerRowOptions' => ['class' => 'atro-th'],
    'columns' => [
        ['class' => \yii\grid\SerialColumn::className(),],
        ['class' => \yii\grid\CheckboxColumn::className(),
            'checkboxOptions' => function ($a) {
                return ['value' => $a->id];
            }],
        'Title',
        'FK_PostType',
        'FK_Author',
    ]
]);

1 个答案:

答案 0 :(得分:0)

在我向您提出有关您的问题的任何建议之前,您应该知道从不使用保留关键字进行函数命名变量或数据库字段名称的编程的基本规则,您已使用Delete作为列名称,您应该更改它立即到is_deleted之类的东西。我将在我的示例参考中使用此名称。

关于您的问题,您有两种方法可以做到。

  1. 添加一个按钮并将javascript点击事件绑定到它,它将序列化所有选中的复选框,然后使用ajax post请求提交所选的ID并将其标记为删除。

  2. 将Gridview包装在表单标记内,然后使用提交按钮将其提交给删除操作。

  3. 我将向您演示第一个选项

    GridView

    的顶部添加按钮
    <?=Html::button('Delete', ['class' => 'btn btn-danger', 'id' => 'delete'])?>
    

    然后为pjax容器

    分配ID
    <?php Pjax::begin(['id' => 'my-grid']);?>
    

    将此javascript粘贴到您的视图顶部,但将ajax调用的url更新为您实际的controller/delete操作

    $this->registerJs('
    $(document).on("click","#delete",function(e){
        let selected=$(".grid-view>table>tbody :input");
        let data=selected.serialize();
        if(selected.length){
            let confirmDelete  =   confirm("Are you sure you want to delete?");
            if(confirmDelete){
                $.ajax({
                    url:"/test/delete",
                    data:data,
                    dataType:"json",
                    method:"post",
                    success:function(data){
                        if(data.success){
                            $.pjax({container:"#my-grid"});
                        }else{
                            alert(data.msg);
                        }
                    },
                    error:function(erorr,responseText,code){}
                });
            }
        }else{
            alert("select someitems to delete");
        }
    });
    ', \yii\web\view::POS_READY);
    

    并将删除操作更改为以下内容,尝试使用transaction块,以便在操作过程中发生某些事情时,它会还原所有更改,更改model名称和{{ 1}}对于相应的模型,我假设您的模型名称为namespace

    Post