コードは常に役に立ちますが、私が正しく理解していれば、ユーザー メッセージを表示するために同様のことを行います。ログインしたユーザーに送信されたメッセージのみを検索するように初期フィルターを設定し、次にユーザーが件名と送信者でメッセージをフィルター処理できるようにする必要もあります。モデルや基準の名前がわからないので、簡単な例を次に示します。
コントローラ:
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),
));
}
デフォルト フィルターの条件が非常に複雑な場合、次のようにモデルに名前付きスコープを作成するのが最善の方法です。
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',
),
);
}
そのスコープを使用する$model->inbox()->search()
には、代わりに CGridView に書き込み、次の行$model->search()
も削除する必要があります$model->msg_to = Yii::app()->user->id;
最後に 1 つ: $_GET 変数などを使用して条件にユーザーからの入力が必要な場合は、「パラメーター化された名前付きスコープ」を使用できます。このページのセクションを参照してください: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes同じ方法でそれらを使用します:$model->inbox()->search()