以下是我的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" >
To Date<input type="text" id="datepicker2" name="todate" >
如何使用此功能进行日期范围搜索?我已在我的问题中进行了更正。请帮助我..
答案 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
orderdate
与fromdate
和todate
在这种情况下,您必须将这两个属性添加到模型类中:
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));
通过对示例代码的小改进,您可以轻松地按日期执行搜索。祝你好运!