这个问题也是很简单的,我们来看看具体实现
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->setSort(false);
分分钟搞定不是事。
好了,我们来谈谈主题:如何利用yii2 gridview实现批量删除?
我先说一下几个步骤啊,免得直接贴代码有的小伙伴删了一句去了一句最后失败了!
1、gridview设置options时增加一个id 这里我们命名grid
'options' => [
// ...其他设置项
'id' => 'grid'
],
2、columns增加选项复选框,批量删除必然不可少了复选框操作,这里我们的name值设定为id,方便对数据操作
[
'class' => 'yiigridCheckboxColumn',
'name' => 'id',
],
3、页面上我们增加一个批量删除按钮,注意这里我们增加了一个class gridview,方便后面js实现点击效果
= Html::a('批量删除', "javascript:void(0);", ['class' => 'btn btn-success gridview']) ?>
4、最后一步,写js实现按钮操作,打开你的console看看,我们很轻松的就拿到了选中的行的id,然后这里就可以异步操作数据了。
$this->registerJs('
$(".gridview").on("click", function () {
//注意这里的$("#grid"),要跟我们第一步设定的options id一致
var keys = $("#grid").yiiGridView("getSelectedRows");
console.log(keys);
});
');
?>
下面贴上完整代码
GridView::widget([
// ......
'options' => ['class' => 'grid-view','style'=>'overflow:auto', 'id' => 'grid'],
// ......
'columns' => [
// ......
[
'class' => 'yiigridCheckboxColumn',
'name' => 'id',
],
// ......
],
]);
$this->registerJs('
$(".gridview").on("click", function () {
var keys = $("#grid").yiiGridView("getSelectedRows");
console.log(keys);
});
');
GridView在开发中常用的功能及技巧
例如,
use yiigridGridView;
echo yiigridGridView::widget([
'dataProvider' => $dataProvider,
]);
一、表格列
表格的列是通过 GridView 配置项中的 yiigridGridView::columns 属性配置的.
use yiigridGridView;
echo GridView::widget([
'dataProvider' => $dataProvider,
//表格列值搜索功能,注意一定要配合attribute才会显示
//$searchModel = new ArticleSearch();
'filterModel' => $searchModel,
//重新定义分页样式
'layout'=> '{items}
[
'label'=>'更新日期',
'format' => ['date', 'php:Y-m-d'],
'value' => 'updated_at'
],
//or
[
//'attribute' => 'created_at',
'label'=>'更新时间',
'value'=>function($model){
return date('Y-m-d H:i:s',$model->created_at);
},
'headerOptions' => ['width' => '170'],
],
2. 处理图片
[
'label'=>'封面图',
'format'=>'raw',
'value'=>function($m){
return Html::img($m->cover,
['class' => 'img-circle',
'width' => 30]
);
}
],
3. 数据列有链接
[
'attribute' => 'title',
'value' => function ($model, $key, $index, $column) {
return Html::a($model->title,
['article/view', 'id' => $key]);
},
'format' => 'raw',
],
4. 数据列显示枚举值(男/女)
[
'attribute' => 'sex',
'value'=>function ($model,$key,$index,$column){
return $model->sex==1?'男':'女';
},
//在搜索条件(过滤条件)中使用下拉框来搜索
'filter' => ['1'=>'男','0'=>'女'],
//or
'filter' => Html::activeDropDownList($searchModel,
'sex',['1'=>'男','0'=>'女'],
['prompt'=>'全部']
)
],
[
'label'=>'产品状态',
'attribute' => 'pro_name',
'value' => function ($model) {
$state = [
'0' => '未发货',
'1' => '已发货',
'9' => '退货,已处理',
];
return $state[$model->pro_name];
},
'headerOptions' => ['width' => '120']
]