Yii CGridview没有过滤

时间:2012-03-31 19:47:18

标签: php filter yii

我正在尝试使用YII CGridview来显示一些数据。

这是我的模型搜索功能的主页:

/**
 * Retrieves a list of models based on the current search/filter conditions.
 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
 */
public function search()
{
    $criteria=new CDbCriteria;
    $criteria->compare('ip',$this->ip,true);
    $criteria->compare('first_use',$this->first_use,true);
    $criteria->compare('last_use',$this->last_use);
    $criteria->compare('memberid',$this->memberid);
    $criteria->compare('countryid',$this->countryid);

    return new CActiveDataProvider(get_class($this), array(
        'criteria'=>$criteria,
    ));
}

这就是我的观点的样子

$this->widget('zii.widgets.grid.CGridView', array(
        'id'=>'iplog-grid',
        'dataProvider'=>$oIPLog->search(),
        'filter'=>$oIPLog,
        'summaryText' => 'showing you {start} - {end} of {count} logged Ips',
        'columns'=>array(
            array(
                'name'=>'ip',
                'type'=>'raw',
            ),
            array(
                'name'=>'first_use',
                'type'=>'datetime',
            ),
            array(
                'name'=>'last_use',
                'type'=>'datetime',
            ),
        ),
    ));

显示CGridview有效,但我似乎无法让它上​​面的过滤器工作。它发送调用,我没有得到任何错误作为响应,它只是再次返回整个未过滤的数据..

任何线索?

2 个答案:

答案 0 :(得分:6)

你的控制器究竟是什么样的?

要使CGridview过滤器正常工作,您需要检查控制器是否设置了过滤器,然后返回过滤后的对象。

澄清一下,这样的事情应该放在你的控制器动作中

$oObject = new Object('search');
if (isset($_GET['Object'])) {
    $oObject->attributes = $_GET['Object'];
}

希望这有帮助

答案 1 :(得分:0)

你必须申请以下几点: 1.在控制器的功能中指定全局变量($ _ REQUEST) 例如

$model = new User('search');

      $model->unsetAttributes();  // clear any default values

        if (isset($_REQUEST['User'])){
            $model->attributes = $_REQUEST['User'];

          }
            $this->render('admin', array(
            'model' => $model,

        ));
  1. 在搜索表单中设置方法类型

    <?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl('user/admin'),
    'method'=>'POST',
    )); ?>
    
  2. 3.在Cgrid视图中,你必须定义像

    这样的URL
     'ajaxUrl'=>Yii::app()->createUrl( 'controller/function' ),