在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");
-
}