代碼總是有幫助的,但如果我正確地理解你,我會做類似的顯示用戶消息;我設置了一個初始過濾器,僅查找發送給登錄用戶的消息,然後我還需要讓用戶按主題和發件人過濾消息。我不知道你的模型或標準的名稱,所以這裏是我如何做一個簡單的例子:
控制器:
public function actionIndex()
{
$model = new Message('search');
$model->unsetAttributes();
if(isset($_GET['Message']))
$model->attributes = $_GET['Message'];
// Set default filter
$model->msg_to = Yii::app()->user->id;
$this->render('index', array('model' => $model));
}
查看:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=> 'message-grid',
'dataProvider'=> $model->search(),
'filter'=> $model,
));
型號:
public function search()
{
$criteria = new CDbCriteria;
$criteria->compare('from',$this->from);
$criteria->compare('msg_to',$this->msg_to);
$criteria->compare('from_name',$this->from_name,true);
$criteria->compare('subject',$this->subject,true);
$criteria->compare('body',$this->body,true);
$criteria->compare('read',$this->read);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array('pageSize'=>15),
));
}
如果您的默認篩選條件非常複雜,最好的辦法是創建一個named scope模型是這樣的:
public function scopes()
{
return array(
'inbox' => array(
'condition' => 't.msg_to = :user_id',
'params' => array(':user_id' => Yii::app()->user->id),
'order' => 'min(t.read) ASC, t.posted_on DESC',
),
);
}
要使用範圍,你將在CGridView寫$model->inbox()->search()
代替$model->search()
你也應該然後取出$model->msg_to = Yii::app()->user->id;
線
最後一兩件事:如果你的標準要求輸入來自用戶,例如通過$ _GET變量,您可以使用「參數化命名範圍」。見這個頁面上:http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes你會使用那些相同的方式:這取決於你的代碼的條件$model->inbox()->search()