Yii GridView 实现时间段筛选功能与自动提交

0 下载量 145 浏览量 更新于2024-08-31 1 收藏 57KB PDF 举报
"yii gridview实现时间段筛选功能" 在Yii框架中,GridView是一个强大的数据展示组件,常用于数据列表的展示和操作。然而,对于特定的需求,如筛选特定时间段的数据,Yii默认的功能可能并不够用。本教程将详细介绍如何在Yii GridView中实现时间段筛选功能,即用户只需在一个输入框中选择时间段,系统就能自动提交并刷新数据。 1. 引入相关JavaScript库 要实现时间段选择,我们需要引入第三方库`jquery.daterangepicker.js`,这是一个基于jQuery的日期范围选择插件,提供简洁的界面供用户选择日期范围。同时,还需引入该插件的CSS文件以及`moment.min.js`,用于处理日期和时间格式。在视图文件中,使用`$this->registerCssFile`和`$this->registerJsFile`注册这些文件。 ```php $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'); ``` 2. 搜索模型处理 在GridView的搜索模型中,我们需要添加处理时间段查询的方法。这通常涉及到数据库查询的调整,确保能够根据用户选择的时间范围来过滤数据。例如,你可能需要在`search()`方法中添加对两个日期字段的比较条件,代表时间段的开始和结束。 ```php public function search($params) { // ...其他查询代码... if (!empty($params['date_range'])) { $dates = explode(' - ', $params['date_range']); $startDate = strtotime($dates[0]); $endDate = strtotime($dates[1]); // 将日期转换为适合数据库查询的格式 $query->andFilterWhere(['BETWEEN', 'your_date_field', date('Y-m-d', $startDate), date('Y-m-d', $endDate)]); } // ...其他查询代码... } ``` 这里的`date_range`参数是用户在前端选择的时间段,`your_date_field`应替换为你实际存储日期的字段名。 3. 解决用户体验问题 使用`daterangepicker.js`的一个小问题是,选择日期后输入框失去焦点,用户需要再次点击并按回车键才能触发数据刷新。为了改善用户体验,可以通过JavaScript模拟回车提交动作。在视图文件中,可以添加如下代码: ```javascript $(document).on('apply.daterangepicker', 'input[name="date_range"]', function () { $(this).trigger('enterKey'); }); $.fn.extend({ trigger: function (eventType) { var e = document.createEvent('HTMLEvents'); e.initEvent(eventType, false, true); this.get(0).dispatchEvent(e); } }); ``` 这段代码会在用户选择日期范围后触发一个模拟的回车事件,使得数据能够自动刷新,无需额外的用户操作。 4. GridView配置 最后,在配置GridView时,添加一个输入框用于显示和选择日期范围。可以使用`kartik\grid\DataColumn`或自定义列类型来实现。 ```php use kartik\grid\DataColumn; // ... echo GridView::widget([ // ...其他配置... 'columns' => [ // ...其他列... [ 'attribute' => 'date_range', 'format' => 'raw', 'value' => function ($data) { return isset($data->date_range) ? $data->date_range : ''; }, 'filterType' => GridView::FILTER_DATE_RANGE, 'filterWidgetOptions' => [ 'presetDropdown' => true, 'pluginOptions' => [ 'opens' => 'left', // ...其他配置... ], ], ], // ...其他列... ], // ...其他配置... ]); ``` 通过以上步骤,你可以在Yii的GridView中实现一个高效且用户友好的时间段筛选功能。这个功能允许用户仅通过一个输入框选择日期范围,并自动提交查询,提供了类似于原生GridView的流畅体验。