当前位置: 首页 > 工具软件 > PLSC > 使用案例 >

PLSC

田念
2023-12-01

在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选择隐藏多少列

 

 

 
  1. <?= GridView::widget([

  2. 'dataProvider' => $dataProvider,

  3. 'showFooter'=>true,

  4. 'id' => 'grid_list',

  5. 'columns' => [

  6. [

  7. 'class' => 'yii\grid\CheckboxColumn',

  8.  
  9. 'footer' => '<button data-control="news" onClick="delete_all(this)">'.Yii::t('common', 'delete_all').'</button>',

  10. 'footerOptions' => ['colspan' => 3, 'class'=>'control'],

  11. ],

  12.  
  13. 'id',

  14. 'c.category',

  15. 'title',

  16. //'content:ntext',

  17. //'image',

  18. // 'keywords',

  19. // 'description',

  20. [

  21. 'attribute' => 'create_time',

  22. 'format' => ['date', 'Y-m-d'],

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

  24. ],

  25. // 'update_time:datetime',

  26. [

  27. 'attribute' => 'status',

  28. 'value' => function ($model) {

  29. return $model->getStatus($model->status);

  30. },

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

  32. ],

  33. // 'out_link',

  34. 'sort',

  35. 'click',

  36. // 'lang',

  37.  
  38. [

  39. 'class' => 'yii\grid\ActionColumn',

  40. 'template' => '{update} {delete}',

  41. ],

  42. ],

  43. ]); ?>


 

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

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

对应的js:

 

 
  1. function delete_all(obj){

  2. var control = $(obj).attr('data-control');

  3. var ids = $("#grid_list").yiiGridView("getSelectedRows");

  4. var ids_str = ids.join(",");

  5. if(confirm('确认删除么?')){

  6. $.ajax({

  7. type: "POST",

  8. url: "/admin/index.php?r="+control+"%2Fajax-deleteall",

  9. data: "ids_str="+ids_str,

  10. dataType: 'json',

  11. success: function(msg){

  12. window.location.reload();

  13. }

  14. });

  15. }

  16.  
  17. }

 

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

 

 
  1. /*

  2. * 批量删除

  3. */

  4. public function actionAjaxDeleteall(){

  5. $model = new News();

  6. $condigtion = '';

  7. $ids_str = '';

  8. $ids_str = Yii::$app->request->post('ids_str');

  9. if(!empty($ids_str)){

  10. $condition = 'id in('.$ids_str.')';

  11. $lists = $model->find()->where($condition)->all();

  12. foreach ($lists as $key => $val) {

  13. //删除旧文件

  14. if(!empty($val['image'])){

  15. @unlink(Yii::getAlias('@mywebroot') . '/' . $val['image']);

  16. }

  17. }

  18. $model->deleteAll($condition);

  19. }

  20. echo json_encode("ok");

  21. }

 类似资料:

相关阅读

相关文章

相关问答