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('請選擇至少一條記錄!'); return false;
        }
        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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM