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 配置文件中open_basedir选项作用
Jul 19 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP常用正则表达式集锦
Aug 17 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
Sep 29 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP 编程的 5个良好习惯
2009/02/20 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python 元类使用说明
2009/12/18 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python可视化实现KNN算法
2019/10/16 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
中文教师求职信
2014/02/22 职场文书
学雷锋的心得体会
2014/09/04 职场文书
生产车间管理制度
2015/08/04 职场文书