我发送一个结果将一些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
));
答案 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',
),
)
);