当我发送一些findAll的结果时,如何为我的CGridView添加一个过滤器

时间:2014-07-02 06:48:12

标签: yii filter cgridview

我发送一个结果将一些findAll()发送到一个CGridView,怎样才能为我的CGridView添加一个过滤器

控制器

$model1=mymodel::model->finAll($criteria1);
$model2=mymodel::model->finAll($criteria2);
$model3=mymodel::model->finAll($criteria3);
///**   
$data=some foreach and combine molde1,model2,model3


**///
$provider = new CArrayDataProvider( $data );
        $this->render('list2', array(
            'model' => $provider
        ));

1 个答案:

答案 0 :(得分:0)

您应该在模型中实现方法(可能基于model::search()方法),该方法会返回搜索条件:

public function getSearchCriteria()
{
    $criteria=new CDbCriteria;
    $criteria->compare('attribute_1',$this->attribute_1,true);
    $criteria->compare('attribute_2',$this->attribute_2);
    // Other attributes here

    return $criteria
}

此外,您应该将$criteria1$criteria2$criteria3与此条件合并:

$myModel = new MyModel('search');
$myModel ->unsetAttributes();
if(isset($_GET['MyModel']))
   $myModel->attributes=$_GET['MyModel'];

$criteria1->mergeWith($myModel->getSearchCriteria(), 'AND');
$criteria2->mergeWith($myModel->getSearchCriteria(), 'AND');
$criteria3->mergeWith($myModel->getSearchCriteria(), 'AND');

$model1=mymodel::model->finAll($criteria1);
$model2=mymodel::model->finAll($criteria2);
$model3=mymodel::model->finAll($criteria3);
///**   
$data=some foreach and combine molde1,model2,model3
**///

$provider = new CArrayDataProvider( $data );

$this->render('list2', array(
   'model' => $provider
));

并且在视野中:

function getFilterParam($modelName, $attributeName, $default = ''){
    $value = Yii::app()->request->getParam($modelName);
    if(is_array($value) && isset($value[$attributeName])){
        return $value[$attributeName];
    }
    else{
        return $default;
    }
}

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $dataProvider,
    'сolumns'=>array(
        'attribute_1' => array(
            'header' => 'Attribute_1',
            'filter' => CHtml::textField('MyModel["attribute_1"]', getFilterParam('MyModel', 'attribute_1')),
            'name' => 'attribute_1',
        ),
        'attribute_2' => array(
            'header' => 'Attribute_2',
            'filter' => CHtml::textField('MyModel["attribute_2"]', getFilterParam('MyModel', 'attribute_2')),
            'name' => 'attribute_2',
        ),
    )
);