您应该在您的模型中实现方法(可能基于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',
),
)
);