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 相关文章推荐
PHP $_SERVER详解
Jan 16 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
深入php list()函数的详解
Jun 05 PHP
ThinkPHP分页实例
Oct 15 PHP
html静态页面调用php文件的方法
Nov 13 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
PHP序列化操作方法分析
Sep 28 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
PHP 观察者模式深入理解与应用分析
Sep 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
PHP4之COOKIE支持详解
2006/10/09 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python random模块常用方法
2014/11/03 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
Python使用Pygame绘制时钟
2020/11/29 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
四风问题自查报告剖析材料
2014/02/08 职场文书
低碳环保标语
2014/06/12 职场文书
邀请函模板
2015/02/02 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
PyTorch中的torch.cat简单介绍
2022/03/17 Python