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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
php 执行系统命令的方法
Jul 07 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
PHP多进程编程实例详解
Jul 19 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
TP5框架安全机制实例分析
Apr 05 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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 xfocus防注入资料
2008/04/27 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python批量更改文件名的实现方法
2017/10/29 Python
Python切片操作实例分析
2018/03/16 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
财务会计毕业生自荐信
2013/11/02 职场文书
教师业务学习制度
2014/01/25 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
环保志愿者活动方案
2014/08/14 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
承诺书模板
2014/08/30 职场文书
小学班级标语口号大全
2015/12/26 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL