yii gridview实现时间段筛选功能


Posted in PHP onAugust 15, 2017

yii gridview功能强大,但是时间筛选比较麻烦,与数据库的存储格式有关,本文的时间格式是date类型

那么问题来了,yii只提供关于时间的text搜索格式,就是只能查找精确日期比如2017-8-10。万能的客户说这样不行,我要搜索时间段!我只要一个输入框!我要自动提交!

yii gridview实现时间段筛选功能 yii gridview实现时间段筛选功能

注意要点:

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">
  <div class="wrapper wrapper-content animated fadeInRight">
    <div class="row">
      <div class="col-sm-12">
        <div class="ibox float-e-margins">
           <?= backend\widgets\TitleBack::widget(['title'=>'记录管理']) ?>
           
          <div 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);
                    },                    
                  ],
                ]
             ]);
          
          ?>
            </div>
            </div>
          </div>
        </div>
      </div>

    </div>
  </div>
</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){}
  });
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
杏林同学录(四)
Oct 09 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
php不用正则验证真假身份证
Nov 06 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
php强制更新图片缓存的方法
Feb 11 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
php+ajax 文件上传代码实例
Mar 18 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 #PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 #PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 #PHP
PHP高精确度运算BC函数库实例详解
Aug 15 #PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 #PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 #PHP
PHP实现的回溯算法示例
Aug 15 #PHP
You might like
PHP导入Excel到MySQL的方法
2011/04/23 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP培训要多少钱
2017/06/06 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
JavaScript简易计算器制作
2020/01/17 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
python分数表示方式和写法
2019/06/26 Python
python实现倒计时小工具
2019/07/29 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
教师节标语大全
2014/10/07 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
大学生求职自荐信
2015/03/24 职场文书
起诉意见书范文
2015/05/19 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript