我们如何进行jQuery GridView日期范围搜索

时间:2014-12-05 11:04:33

标签: php jquery yii

以下是我的Gridview小部件代码。我想通过输入两个日期范围值来搜索这个jquery gridview。日期范围值来自datepicker。

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'printstatusforlocal-grid',
'dataProvider'=>$model->searchprogress(),
'filter'=>$model,
'columns'=>array(

'order_id',
'albumname',            
'orderdate',
'username',
array('header'=> 'Synchronized',
'name'=>'synchronize',
'value'=>'$data->Syncronize',
 ),
array(
'class'=>'CButtonColumn',
 ),
 ),
 )); ?>


 This is my gridview widget.I want to make a date range search through this? 
        My date picker chosing code is following..


<script src="<?php echo  Yii::app()->baseUrl.'/js/jquery.easing.1.3.js';?>"></script> <script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery-ui-1.10.4.min"  type="text/javascript"></script>
<script>
$(function() {
$( "#datepicker1, #datepicker2" ).datepicker({
dateFormat: "yy-mm-dd",
});

 From Date<input type="text" id="datepicker1" name="fromdate" >&nbsp;&nbsp;&nbsp;
 To Date<input type="text" id="datepicker2" name="todate" >

如何使用此功能进行日期范围搜索?我已在我的问题中进行了更正。请帮助我..

2 个答案:

答案 0 :(得分:1)

jquery ui datepicker有一些api。所以我使用onSelect方法: on datepicker select 我们使用附加的date GET参数重新路由到相同的控制器/操作:

<?php 
   $url= $this->createUrl($this->route());// to go to the same controller/action 
   ...
?>
<script> 
$("#datepicker1, #datepicker2").datepicker({
  dateFormat: "yy-mm-dd",
// we append the current value to reroute
  onSelect: function(dateText) {location.href = "<php echo $url;?>&date="+ this.value;},
});
</script>

然后在你的网格中,你可以将$_GET['date']传递给searchprogress()方法:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'printstatusforlocal-grid',
'dataProvider'=>$model->searchprogress($_GET['date']),
 ...

现在您需要将此方法修改为smth。像这样:

public function searchprogress($date=null)
{
    $criteria=new CDbCriteria;
    $criteria->compare('id',$this->id); 
    ...
    if ($date)        
        $criteria->compare('date', $date); // compare models with this passed parameter
    else  
        $criteria->compare('date', $this->date);     // default comparison
// if you want some range comparison
    if ($date) $criteria->addCondition('Begin >= "' . $date . '" ');
    if ($date) $criteria->addCondition('End<= "' . $date . '" '); 
    ...
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria, 
    ));  

现在searchprogress()方法将返回DataProvider,其数据范围根据输入的datepicker值。

答案 1 :(得分:0)

如果我理解正确的话:

    数据库表中的
  • 日期字段为orderdate
  • 您要搜索比较orderdatefromdatetodate
  • 的记录

在这种情况下,您必须将这两个属性添加到模型类中:

public $fromdate;
public $todate;

然后在模型规则中声明它们是安全的(在所有场景中或仅在搜索中):

public function rules () {
    return array() {
        ...
        array('fromdate, todate', 'safe', 'on'=>'search'),
        ...
    }
}

将这些属性添加到网格过滤器:

'columns' => array(
    ...
    array(
        'name' => 'orderdate',
        'filter' => $this->widget( 'zii.widgets.jui.CJuiDatePicker', array(
                'model'          => $model,
                'attribute'      => 'fromdate',
            ), true ) . $this->widget( 'zii.widgets.jui.CJuiDatePicker', array(
                'model'          => $model,
                'attribute'      => 'todate',
            ), true ),
    ),
    ...
),

然后将compare添加到searchprogress()方法:

$criteria->compare('orderdate', $model->fromdate);
$criteria->compare('orderdate', $model->todate);

请注意。 DB表和属性值中的日期格式必须采用相同的格式(例如Y-m-d)。如果您在DB中存储时间戳,那么您需要这样的内容:

$criteria->compare('orderdate', strtotime($model->fromdate));

通过对示例代码的小改进,您可以轻松地按日期执行搜索。祝你好运!