yii gridview實現時間段篩選功能

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了yii gridview實現時間段篩選功能,一個輸入框,自動認可功能,具有一定的參考價值,感興趣的小夥伴們可以參考一下

yii gridview功能強大,但是時間篩選比較麻煩,與資料庫的儲存格式有關,本文的時間格式是date類型

那麼問題來了,yii只提供關於時間的text搜尋格式,就是只能尋找精確日期比如2017-8-10。萬能的客戶說這樣不行,我要搜尋時間段!我只要一個輸入框!我要自動認可!

注意要點:

1.首先要在gridview中引入相關js,實現雙日期,這裡選擇了jquery.daterangepicker.js,簡單大方(缺點:不能選擇年份,需要手動點擊,我這裡不會大幅度跨年份,可用)

2.要在searchmodel裡面對資料進行處理,進行時間查詢

3.坑:選擇日期後,輸入框沒有游標,需要二次點擊,然後斷行符號才能實現資料重新整理,與原裝gridview體驗相差較大

4.梯:在檢測到輸入日期資料後,使用jq類比斷行符號提交動作,完美實現了類似gridview的原裝體驗,絲般順滑

view中

<?php//use yii\web\View;use kartik\grid\GridView;use yii\bootstrap\Html;use common\helps\ArrayHelper;use yii\helpers\Url;//引入時間段js,這裡使用了jquery.daterangepicker.js$this->registerCssFile('/plugins/datep/css/daterangepicker.css');$this->registerJsFile('/plugins/datep/js/moment.min.js');$this->registerJsFile('/plugins/datep/js/jquery.daterangepicker.js');$this->registerJsFile('/plugins/datep/js/demo.js');?><body class="gray-bg">  <p class="wrapper wrapper-content animated fadeInRight">    <p class="row">      <p class="col-sm-12">        <p class="ibox float-e-margins">           <?= backend\widgets\TitleBack::widget(['title'=>'記錄管理']) ?>                     <p class="ibox-content">                        <?php                               echo GridView::widget([                'dataProvider' => $dataProvider,                'filterModel' => $searchModel,                     'columns' => [                                    ['class' => 'yii\grid\SerialColumn'],                  ['class' => 'yii\grid\CheckboxColumn'],                  'title',                                    [                                            'label'=>'下發時間',                        'attribute'=>'issued',                     'value' => function ($data) {                      return ArrayHelper::get_date_time($data->issued);                    },                                      ],                ]             ]);                    ?>            </p>            </p>          </p>        </p>      </p>    </p>  </p></body>

demo.js放在最後說,先說PatentDataBdSearch 對輸入框發送過來的資料進行處理,時間段查詢資料庫

//時間段篩選    if($this->issued){      $time= explode('~', $this->issued);      $query->andFilterWhere(['between', 'patent_data.issued', $time[0],$time[1]]);     }

demo.js 實現資料檢測,類比斷行符號操作

$(function(){    /*  define a new language named "custom"  外掛程式設定  */  $.dateRangePickerLanguages['custom'] =   {    'selected': 'Choosed:',    'days': 'Days',    'apply': 'Close',    'week-1' : 'Mon',    'week-2' : 'Tue',    'week-3' : 'Wed',    'week-4' : 'Thu',    'week-5' : 'Fri',    'week-6' : 'Sat',    'week-7' : 'Sun',    'month-name': ['January','February','March','April','May','June','July','August','September','October','November','December'],    'shortcuts' : 'Shortcuts',    'past': 'Past',    '7days' : '7days',    '14days' : '14days',    '30days' : '30days',    'previous' : 'Previous',    'prev-week' : 'Week',    'prev-month' : 'Month',    'prev-quarter' : 'Quarter',    'prev-year' : 'Year',    'less-than' : 'Date range should longer than %d days',    'more-than' : 'Date range should less than %d days',    'default-more' : 'Please select a date range longer than %d days',    'default-less' : 'Please select a date range less than %d days',    'default-range' : 'Please select a date range between %d and %d days',    'default-default': 'This is costom language'  };      //下面設定稱自己的輸入框選取器  $("input[name='PatentDataBdSearch[issued]']").dateRangePicker(  {     //時間段的類型設定,這裡是輸入框時間段以~分隔,選擇時間後自動消失彈出框     separator : ' ~ ',     autoClose: true  }).bind('datepicker-change',function(e,r)  {    try    {      console.log(r);            //重要:如果檢測有輸入值了,就在輸入框顯示光線標,或者類比斷行符號事件,自動認可,像gridview原生功能              //不添加下面的代碼,將無法自動認可,            var issued=$("input[name='PatentDataBdSearch[issued]']").val();            console.log(issued);            if(issued){              //輸入之後顯示光線標              //$("input[name='PatentDataBdSearch[issued]']").focus();                //類比斷行符號操作,輸入後自動認可,重新整理資料,一定要設定時間計數器,否則將無法提交              setTimeout(function(){                e = jQuery.Event("keydown");                e.keyCode = 13; //enter key                jQuery("input[name='PatentDataBdSearch[issued]']").trigger(e);              },100);            }    }catch(e){}  });});

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.