コメントの管理には、コメントの更新・削除・承認があります。これらの操作はCommentControllerクラスのアクションとして実装します。
yiicで生成したコードの、コメント更新・削除の部分はほとんど変更せずに使います。
コメントが新しく作成されたとき、コメントは承認待ちの状態になります。ゲストユーザーに見えるようにするためには承認が必要です。コメントの承認は、基本的にコメントのステータス・カラムを変更するだけです。
CommentControllerのactionApprove()メソッドを以下のように作成します。
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()メソッドを呼んでステータスを変更します。それから、このコメントが属する記事を表示するページに、ブラウザをリダイレクトします。
また、すべてのコメントを表示するためにCommentのactionIndex()メソッドを修正します。承認待ちのコメントを先頭に表示するようにします。
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_postとtbl_commentの両方にstatusとcreate_timeというカラムがあるので、曖昧さを無くすためにテーブルのエイリアス名を接頭辞として付ける必要があります。ガイドに記述されているように、リレーショナルなクエリーでは、プライマリテーブルのエイリアスは常にtです。そのため上記コードでは、statusカラムとcreate_timeカラムに接頭辞tを付けています。
記事のindexビューのように、CommentControllerのindexビューでもCListViewを使ってコメント一覧を表示します。部分的ビューとして/wwwroot/blog/protected/views/comment/_view.phpを使って、個々のコメントの詳細を表示します。ここでは詳細には立ち入りません。興味のある方はblogデモの対応するファイル/wwwroot/yii/demos/blog/protected/views/comment/_view.phpを参照してください。
Be the first person to leave a comment
Please login to leave your comment.