본문 바로가기

Yii Framework/블로그 만들기

15. 코멘트 관리

이 곳은 제가 개인적으로 YII framework의 블로그 만들기를 번역해 놓은 곳입니다.

제가 영어 전공자도.. 그렇다고 영어랑 친하지도 않습니다. 

그래서 보시면 뭔가 글도 엉성하고 말이 안맞는게 많습니다.

잘못 오역된 부분이라던지 그런 부분들 친절하게 알려주시면 바로 수정하겠습니다.

이 페지의 원글 http://www.yiiframework.com/doc/blog/1.1/en/comment.admin



코멘트관리

댓글관리는 게시글의 업데이트, 삭제의 승인 기능이 포함되어 있습니다. 이러한 작업은CommentController 클래스의 작업으로 구현합니다.

1. 댓글 업데이트 및 삭제

 yiic 에서 생성 한 코드의 주석 갱신 · 삭제 부분은 거의 변경하지 않고 사용합니다.

2. 댓글 승인

코멘트가 새로 생성 될 때, 코멘트는 보류 상태가됩니다. 게스트 사용자에게 보이게하기 위해서는 승인이 필요합니다. 댓글 승인은 기본적으로 댓글 status 컬럼을 변경하기 만하면됩니다.

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 모델에 approve() 메서드를 작성해야합니다. 다음과 같이합니다.

public function approve()
{
    $this->status=Comment::STATUS_APPROVED;
    $this->update(array('status'));
}

간단하게 댓글 status 속성을 Comment 클래스에 정의되어있는 승인 된 상태를 나타내는 정수로 설정합니다.

class Comment extends CActiveRecord
{
    ...
 
    const STATUS_PENDING=1;
    const STATUS_APPROVED=2;
 
    ..
}

그리고 다음 update () 메소드를 불러 새로 설정된 속성을 데이터베이스에 저장합니다.

또한 모든 코멘트를 표시하기 위해 CommentController 의 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 으로, 그 값을 기본 테이블 (tbl_comment )에서 검색해야 함을 보여줍니다.

기사 index 뷰처럼 CommentController 의 index 뷰에서도 CListView 를 사용하여 코멘트를 표시합니다. 부분적 뷰로 /wwwroot/blog/protected/views/comment/_view.php 를 사용하여 개별 코멘트 정보를 표시합니다. 여기에서는 자세하게는 들어가지 않습니다. 관심있는 분은 블로그 데모 해당 파일 /wwwroot/yii/demos/blog/protected/views/comment/_view.php. 를 참조하십시오.