コメントの管理

コメントの管理には、コメントの更新・削除・承認があります。これらの操作はCommentControllerクラスのアクションとして実装します。

1. コメントの更新と削除

yiicで生成したコードの、コメント更新・削除の部分はほとんど変更せずに使います。

2. コメントの承認

コメントが新しく作成されたとき、コメントは承認待ちの状態になります。ゲストユーザーに見えるようにするためには承認が必要です。コメントの承認は、基本的にコメントのステータス・カラムを変更するだけです。

CommentControlleractionApprove()メソッドを以下のように作成します。

public function actionApprove()
{
    if(Yii::app()->request->isPostRequest)
    {
        $comment=$this->loadModel();
        $comment->approve();
        $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400,'Invalid request...');
}

上記コードでは、POSTリクエスト経由でapproveアクションが呼ばれたときに、Commentモデルで定義したapprove()メソッドを呼んでステータスを変更します。それから、このコメントが属する記事を表示するページに、ブラウザをリダイレクトします。

また、すべてのコメントを表示するためにCommentactionIndex()メソッドを修正します。承認待ちのコメントを先頭に表示するようにします。

public function actionIndex()
{
    $dataProvider=new CActiveDataProvider('Comment', array(
        'criteria'=>array(
            'with'=>'post',
            'order'=>'t.status, t.create_time DESC',
        ),
    ));
 
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

上記コードでは、tbl_posttbl_commentの両方にstatuscreate_timeというカラムがあるので、曖昧さを無くすためにテーブルのエイリアス名を接頭辞として付ける必要があります。ガイドに記述されているように、リレーショナルなクエリーでは、プライマリテーブルのエイリアスは常にtです。そのため上記コードでは、statusカラムとcreate_timeカラムに接頭辞tを付けています。

記事のindexビューのように、CommentControllerindexビューでもCListViewを使ってコメント一覧を表示します。部分的ビューとして/wwwroot/blog/protected/views/comment/_view.phpを使って、個々のコメントの詳細を表示します。ここでは詳細には立ち入りません。興味のある方はblogデモの対応するファイル/wwwroot/yii/demos/blog/protected/views/comment/_view.phpを参照してください。

$Id: comment.admin.txt 1810 2010-02-18 00:24:54Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.