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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
php一些公用函数的集合
Mar 27 PHP
PHP 金额数字转换成英文
May 06 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
php中hashtable实现示例分享
Feb 13 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
php批量修改表结构实例
May 24 PHP
基于swoole实现多人聊天室
Jun 14 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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+mysql)
2007/11/23 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
web前端开发也需要日志
2010/12/09 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python实现猜单词小游戏
2020/05/22 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Python with标签使用方法解析
2020/01/17 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
医学生职业规划范文
2014/01/05 职场文书
房产委托公证书
2014/04/08 职场文书
消防工作实施方案
2014/06/09 职场文书
孔庙导游词
2015/02/04 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL