yii gridview實(shí)現(xiàn)時(shí)間段篩選功能
yii gridview功能強(qiáng)大,但是時(shí)間篩選比較麻煩,與數(shù)據(jù)庫的存儲格式有關(guān),本文的時(shí)間格式是date類型
那么問題來了,yii只提供關(guān)于時(shí)間的text搜索格式,就是只能查找精確日期比如2017-8-10。萬能的客戶說這樣不行,我要搜索時(shí)間段!我只要一個輸入框!我要自動提交!

注意要點(diǎn):
1.首先要在gridview中引入相關(guān)js,實(shí)現(xiàn)雙日期,這里選擇了jquery.daterangepicker.js,簡單大方(缺點(diǎn):不能選擇年份,需要手動點(diǎn)擊,我這里不會大幅度跨年份,可用)
2.要在searchmodel里面對數(shù)據(jù)進(jìn)行處理,進(jìn)行時(shí)間查詢
3.坑:選擇日期后,輸入框沒有光標(biāo),需要二次點(diǎn)擊,然后回車才能實(shí)現(xiàn)數(shù)據(jù)刷新,與原裝gridview體驗(yàn)相差較大
4.梯:在檢測到輸入日期數(shù)據(jù)后,使用jq模擬回車提交動作,完美實(shí)現(xiàn)了類似gridview的原裝體驗(yàn),絲般順滑
view中
<?php
//use yii\web\View;
use kartik\grid\GridView;
use yii\bootstrap\Html;
use common\helps\ArrayHelper;
use yii\helpers\Url;
//引入時(shí)間段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'=>'下發(fā)時(shí)間',
'attribute'=>'issued',
'value' => function ($data) {
return ArrayHelper::get_date_time($data->issued);
},
],
]
]);
?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
demo.js放在最后說,先說PatentDataBdSearch 對輸入框發(fā)送過來的數(shù)據(jù)進(jìn)行處理,時(shí)間段查詢數(shù)據(jù)庫
//時(shí)間段篩選
if($this->issued){
$time= explode('~', $this->issued);
$query->andFilterWhere(['between', 'patent_data.issued', $time[0],$time[1]]);
}
demo.js 實(shí)現(xiàn)數(shù)據(jù)檢測,模擬回車操作
$(function(){
/*
define a new language named "custom" 插件設(shè)置
*/
$.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'
};
//下面設(shè)置稱自己的輸入框選擇器
$("input[name='PatentDataBdSearch[issued]']").dateRangePicker(
{
//時(shí)間段的類型設(shè)置,這里是輸入框時(shí)間段以~分隔,選擇時(shí)間后自動消失彈出框
separator : ' ~ ',
autoClose: true
}).bind('datepicker-change',function(e,r)
{
try
{
console.log(r);
//重要:如果檢測有輸入值了,就在輸入框顯示光標(biāo),或者模擬回車事件,自動提交,像gridview原生功能
//不添加下面的代碼,將無法自動提交,
var issued=$("input[name='PatentDataBdSearch[issued]']").val();
console.log(issued);
if(issued){
//輸入之后顯示光標(biāo)
//$("input[name='PatentDataBdSearch[issued]']").focus();
//模擬回車操作,輸入后自動提交,刷新數(shù)據(jù),一定要設(shè)置時(shí)間計(jì)數(shù)器,否則將無法提交
setTimeout(function(){
e = jQuery.Event("keydown");
e.keyCode = 13; //enter key
jQuery("input[name='PatentDataBdSearch[issued]']").trigger(e);
},100);
}
}catch(e){}
});
});
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Yii中的relations數(shù)據(jù)關(guān)聯(lián)查詢及統(tǒng)計(jì)功能用法詳解
- Yii統(tǒng)計(jì)不同類型郵箱數(shù)量的方法
- Yii 2.0在Grid中格式化時(shí)間方法示例
- yii2實(shí)現(xiàn)根據(jù)時(shí)間搜索的方法
- yii2超好用的日期組件和時(shí)間組件
- Yii2超好用的日期和時(shí)間組件(值得收藏)
- Yii2如何批量添加數(shù)據(jù)
- Yii2 批量插入、更新數(shù)據(jù)實(shí)例
- Yii2框架數(shù)據(jù)庫簡單的增刪改查語法小結(jié)
- yii 框架實(shí)現(xiàn)按天,月,年,自定義時(shí)間段統(tǒng)計(jì)數(shù)據(jù)的方法分析
相關(guān)文章
帝國CMS留言板回復(fù)后發(fā)送EMAIL通知客戶
這篇文章主要介紹了帝國CMS留言板回復(fù)后發(fā)送EMAIL通知客戶的方法和具體修改示例,有需要的小伙伴可以參考下。2015-07-07
PHP實(shí)現(xiàn)動態(tài)web服務(wù)器方法
這篇文章主要通過PHP技術(shù)實(shí)現(xiàn)動態(tài)web服務(wù)器的方法,有需要的朋友可以借鑒。2015-07-07
PHP版本升級到7.x后wordpress的一些修改及wordpress技巧
這篇文章主要介紹了PHP版本升級到7.x后wordpress的一些修改及wordpress技巧的相關(guān)資料,需要的朋友可以參考下2015-12-12
PHP模板引擎Smarty之配置文件在模板變量中的使用方法示例
這篇文章主要介紹了PHP模板引擎Smarty之配置文件在模板變量中的使用方法,結(jié)合實(shí)例形式分析了配置文件變量的具體使用步驟與相關(guān)技巧,需要的朋友可以參考下2016-04-04
ThinkPHP使用Smarty第三方插件方法小結(jié)
這篇文章主要介紹了ThinkPHP使用Smarty第三方插件方法,結(jié)合實(shí)例形式總結(jié)分析了ThinkPHP使用Smarty模板的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03
TP框架實(shí)現(xiàn)上傳一張圖片和批量上傳圖片的方法分析
這篇文章主要介紹了TP框架實(shí)現(xiàn)上傳一張圖片和批量上傳圖片的方法,結(jié)合實(shí)例形式分析了TP框架圖片上傳操作相關(guān)原理、實(shí)現(xiàn)步驟及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
php使用shmop函數(shù)創(chuàng)建共享內(nèi)存減少負(fù)載的方法
這篇文章主要介紹了php使用shmop函數(shù)創(chuàng)建共享內(nèi)存減少負(fù)載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Laravel Reponse響應(yīng)客戶端示例詳解
這篇文章主要給大家介紹了關(guān)于Laravel Reponse響應(yīng)客戶端的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

