30分钟搞定yii的gridview,你可能只看这一篇就够了 (包含基本配置,下拉筛选,多选删除)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了30分钟搞定yii的gridview,你可能只看这一篇就够了 (包含基本配置,下拉筛选,多选删除)相关的知识,希望对你有一定的参考价值。

技术分享

view代码

<?php
/* @var $this yii\\web\\View */
/* @var $form yii\\bootstrap\\ActiveForm */
/* @var $model \\common\\models\\LoginForm */
use yii\\helpers\\Url;
use yii\\helpers\\html;
use common\\helps\\Helps;
use common\\helps\\ArrayHelper;
use yii\\grid\\GridView;
use backend\\models\\User;
use yii\\widgets\\ActiveForm;
//use yii\\bootstrap\\ActiveForm;
?>

<?php 
//gridview最外层加入表单,方便全选提交,会影响下拉筛选,如果没有下拉筛选可以用
//    $form=ActiveForm::begin([
//        ‘id‘=>‘Form‘,
//        ‘enableClientValidation‘=>false, 
//        ‘action‘=>‘javscript:;‘
//    ]);
?>
<div class="row">
    <div class="col-xs-12">
          <div class="box">
            <div class="box-header">
              <h3 class="box-title">考勤列表</h3>
            </div>
            <!-- /.box-header -->
            <div class="box-body table-responsive">   
             <?php
                    echo GridView::widget([
                            ‘dataProvider‘ => $dataProvider,
                            ‘filterModel‘ => $searchModel,
                            //默认layout的表格三部分可不写:几条简介,表格,分页;可以去掉任意部分 
                            //‘layout‘ => "{summary}\\n{items}\\n{pager}" ,
                            //没有数据时候显示的内容和html样式
                            ‘emptyText‘=>‘当前没有内容‘,
                            ‘emptyTextOptions‘=>[‘style‘=>‘color:red;font-weight:bold‘],
                            //给所有的行属性增加id,或class,方便后面选择后整行改变颜色
                            ‘rowOptions‘=>function($model){
                                return [‘id‘=>"tr-".$model->id];
                            },  
                            //显示底部(就是多了一栏),默认是关闭的
                            ‘showFooter‘=>true,
                            ‘columns‘ => [
                                //ActionColumn 显示操作按钮等CheckboxColumn 显示复选框RadioButtonColumn 显示单选框SerialColumn 显示行号
                                [
                                    ‘class‘ => ‘yii\\grid\\CheckboxColumn‘,
                                    //‘cssClass‘=>‘_check‘,//不能用????后面有js实现的
                                    //底部第一列占6格,其他列隐藏,形成合并1个单元格效果
                                    ‘footerOptions‘=>[‘colspan‘=>6],
                                    ‘footer‘=>‘<a href="javascript:;" class="_delete_all" data-url="‘.Yii::$app->urlManager->createUrl([‘/attend/delete_all‘]).‘">删除全部</a>‘,
                                    
                                ],
                                    //‘nickname‘,//默认内容搜索,需要输入文字
                                [  
                                    //header 可以解析html代码,将表头默认的点击排序改为添加一个链接
                                    ‘header‘=>‘<a href="www.baidu.com">员工姓名2</a>‘,
                                    //label标题会默认覆盖原来的uid名字(即显示员工姓名不显示用户id),不能解析html
                                    ‘label‘=>‘员工姓名‘,
                                    ‘attribute‘=>‘uid‘,
                                    ‘value‘ => function ($data) {
                                        //$arr=Helps::get_correspond_list("get_nickname_list", ‘id‘, "nickname");
                                        $arr=ArrayHelper::map(User::find()->all(),‘id‘,‘nickname‘);
                                        return $arr[$data->uid];//返回搜索值
                                    },
                                    ‘filter‘ => Helps::get_correspond_list("get_nickname_list", ‘id‘, "nickname"),//下拉选择内容
                                    ‘footerOptions‘=>[‘class‘=>‘hide‘],//隐藏底部的当前列
                                    //‘footerOptions‘=>[‘style‘=>‘display:none‘],//也可以        
                                ],
                                [
                                    ‘attribute‘=>‘astart‘,
                                    ‘format‘=>[‘date‘, ‘php:Y-m-d H:i:s‘],
                                    //关闭默认的点击表头排序,字体将变黑色,蓝色的表示可以点击排序
                                    ‘enableSorting‘=>false,
                                    //如果sign=1不显示此列,否则显示
                                    ‘visible‘=>$sign==1 ? false : true,
                                    //‘value‘=>function($data){
                                    //    return date(‘Y-m-d H:i:s‘,$data->create_time);
                                    //}
                                    ‘footerOptions‘=>[‘class‘=>‘hide‘],
                                ],
                                [
                                    ‘attribute‘=>‘aend‘,
                                    ‘value‘ => function ($data) {
                                        return Helps::time_to_date($data->astart);
                                    },
                                    ‘footerOptions‘=>[‘class‘=>‘hide‘],
                                ],
                               
                                [
                                    ‘attribute‘=>‘state‘,
                                    ‘value‘ => function ($data) {
                                        $arr=Helps::get_attend_status_label();
                                        return $arr[$data->state];
                                    },
                                    ‘filter‘ => Helps::get_attend_status(),
                                    ‘format‘ => ‘raw‘, //显示label样式,否则显示html代码
                                    ‘footerOptions‘=>[‘class‘=>‘hide‘],        
                                ],
                                [
                                    ‘class‘ => ‘yii\\grid\\ActionColumn‘,
                                    //控制
                                    "header" => "操作",
                                    ‘headerOptions‘ => [‘width‘ => ‘100‘],
                                    ‘template‘=>‘{get} {yes} {no} {update} {delete}‘,
                                    //下面buttons可以不写delete函数,delete默认调用当前控制器下面的delete方法
                                    "buttons" => [
                                        "delete"=>function ($url, $model, $key) {//print_r($key);exit;
                                            return "<a href=‘javascript:;‘ class=‘_delete‘ data-url=‘".Yii::$app->urlManager->createUrl([‘/attend/delete_js‘,‘id‘=>$model->id])."‘>删除</a>";
                                        },
                                        "update"=>function ($url, $model, $key) {//print_r($key);exit;
                                        //$model 为当前的1条数据
                                        //key就是id
                                        //$url就是根据id自动拼出链接 /attend/update?id=156
                                            $str=‘‘;
                                            $str=Html::a(‘<span class="glyphicon glyphicon-pencil"></span>‘, Url::to([‘attend/edit‘,‘id‘=>$model->id]), [‘title‘=>‘修改‘]);
                                            return $str;
                                        },
                                    ],
                                    ‘footerOptions‘=>[‘class‘=>‘hide‘],
                                ],
                            ]
                     ]);
                    ?>
          <!-- /.box -->
        </div>
</div>
<?php     //ActiveForm::end();   ?>    
<style>
    .select_bg{ background:BCC8D0;  }
</style>
<script>
     $("input[name=‘selection[]‘]").addClass("_check");
     //选中改变颜色
     $("._check").click(function(){
         var id=$(this).val();
         console.log(id);
         if($("#tr-"+id).hasClass("select_bg")){
            $("#tr-"+id).removeClass("select_bg");    
         }else{
            //$("#tr-"+id).css("background-color",‘red‘);
            $("#tr-"+id).addClass("select_bg");
         }   
     });
     $("._delete").click(function(){
         var url=$(this).attr(‘data-url‘);
         console.log(url);
         $.getJSON(url,{},function(d){
            if(d.done==true){
                alert(‘删除成功‘);
                window.location.href="<?=Url::to([‘attend/index‘])?>";
            }else{
                alert(d.error);
            } 
         });
    });
    $("._delete_all").click(function(){
        var many_check=$("input[name=‘selection[]‘]:checked");
        var ids="";
        $(many_check).each(function(){
            ids+=this.value+‘,‘;                       
        });
        //去掉最后一个逗号
        if (ids.length > 0) {
            ids = ids.substr(0, ids.length - 1);
        }else{
            alert(‘请选择至少一条记录!‘);die();
        }
        var url=$(this).attr(‘data-url‘);
        $.post(url,{ids},function(d){
            console.log(d);
            if(d.done==true){
                console.log(1);
                alert(‘删除成功!‘);
                window.location.href="<?=Url::to([‘attend/index‘])?>";
            }else{
                alert(d.error);
            } 
        },‘json‘);
    });
</script>

controller代码

<?php
namespace backend\\controllers;

use Yii;

use backend\\models\\Attend;
use backend\\models\\AttendSearch;
use yii\\data\\Pagination;
use common\\helps\\ArrayHelper;
use backend\\models\\User;
use yii\\helpers\\Json;


class AttendController extends SiteController
{
    public function actionIndex(){
        
        $searchModel = new AttendSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->get());
        $sign=Yii::$app->request->get(‘sign‘);
        return $this->render(‘index‘,
        [
            "dataProvider"=>$dataProvider,
            "searchModel"=>$searchModel,
            "sign"=>$sign,
        ]);
    }
    /*
     * 操作链接使用的单个删除
     */
    public function actionDelete(){
        $id=Yii::$app->request->get(‘id‘);
        $model = Attend::findOne($id);        
        $model->delete();
        return $this->redirect([‘attend/index‘]);
    }
    /*
     * 操作js使用的单个删除
     */
    public function actionDelete_js($id){
        try{
            $model = Attend::findOne($id);        
            $model->delete();
            echo Json::encode([‘done‘=>true]);
        } catch (Exception $e) {
            echo Json::encode([‘done‘=>false,‘error‘=>$e->getMessage()]);
        }
    }
    /*
     * 多选删除js
     */
    public function actionDelete_all(){
        try{
            $ids=Yii::$app->request->post(‘ids‘);
            $ids=explode(‘,‘,$ids);
            //数组直接查询
            $lists = Attend::find()->where([‘in‘,‘id‘,$ids])->all();     
            foreach($lists as $list){
                $list->delete();
            }
            echo Json::encode([‘done‘=>true]);
        } catch (Exception $e) {
            echo Json::encode([‘done‘=>false,‘error‘=>$e->getMessage()]);
        }
    }
 
}

model代码

<?php
namespace backend\\models;

use Yii;
use yii\\base\\Model;
use yii\\data\\ActiveDataProvider;

class AttendSearch extends Attend
{
    public function rules()
    {
        // 只有在 rules() 函数中声明的字段才可以搜索,不声明不显示搜索框
        return [
           [[‘id‘,‘uid‘,‘username‘,‘nickname‘,‘time‘,‘state‘], ‘safe‘],
        ];
    }

    public function scenarios()
    {
        // 旁路在父类中实现的 scenarios() 函数
        return Model::scenarios();
    }

    public function search($params){
        $query = Attend::find();
        
        if(!Yii::$app->request->get(‘sort‘)){
            $query->orderBy(‘id desc‘);
        }

        $dataProvider = new ActiveDataProvider([
            ‘query‘ => $query,
            ‘pagination‘ => [
                    ‘pageSize‘ => 15,
                ],
        ]);

        // 从参数的数据中加载过滤条件,并验证
        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }
        // 增加过滤条件来调整查询对象
        $query->andFilterWhere([‘=‘, ‘nickname‘, $this->nickname])
              ->andFilterWhere([‘=‘, ‘uid‘, $this->uid])
              ->andFilterWhere([‘=‘, ‘state‘, $this->state]);

        return $dataProvider;
    }
}

 

<?php
namespace backend\\models;

//web后端
use Yii;
use common\\helps\\ArrayHelper;
use backend\\models\\User;
use backend\\models\\Worktime;


class Attend extends\\yii\\db\\ActiveRecord
{    
    public static function tableName()
    {
        return ‘attend‘;
    }
    public function attributeLabels()
    {
        return [
            ‘id‘ => ‘ID‘,
            ‘uid‘ => ‘员工id‘,
            ‘username‘ => ‘员工邮箱‘,
            ‘nickname‘ => ‘员工名‘,
            ‘astart‘ => ‘上班签到‘,
            ‘thresholdon‘ => ‘上班签到‘,
            ‘aend‘ => ‘下班打卡‘,
            ‘thresholdoff‘ => ‘上班签到‘,   
            ‘time‘ => ‘统计‘,
            ‘state‘ => ‘状态‘,
        ];
    }
}  

 

参考

http://www.maomaonv.com/site-index.html

 

以上是关于30分钟搞定yii的gridview,你可能只看这一篇就够了 (包含基本配置,下拉筛选,多选删除)的主要内容,如果未能解决你的问题,请参考以下文章

五分钟搞定 Linux 文档全部知识,就看这篇文章

面试其实只看这 4 点

面试其实只看这 4 点

面试其实只看这 4 点

前端知识合集重中之重,我只看这一篇!

前端知识合集重中之重,我只看这一篇!