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

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

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

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

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



게시물보기

이 블로그 어플리케이션에서 문서는 목록 형식으로 표시 혼자 볼 수 있습니다. 전자는 index 작업으로 구현되고 후자는view 조작으로 구현되어 있습니다. 이 섹션에서는 초기의 요구에 맞게 두 작업을 정의합니다.

1. view 작업 사용자 지정

view 작업 PostController 의 actionView() 메소드로 구현되어 있습니다. 표시 내용은 view 라는 뷰에서 생성됩니다.뷰 파일은/wwwroot/blog/protected/views/post/view.php 입니다.

다음 코드는 PostController 에서 view 작업을 구현하는 부분입니다 

public function actionView()
{
    $post=$this->loadModel();
    $this->render('view',array(
        'model'=>$post,
    ));
}
 
private $_model;
 
public function loadModel()
{
    if($this->_model===null)
    {
        if(isset($_GET['id']))
        {
            if(Yii::app()->user->isGuest)
                $condition='status='.Post::STATUS_PUBLISHED
                    .' OR status='.Post::STATUS_ARCHIVED;
            else
                $condition='';
            $this->_model=Post::model()->findByPk($_GET['id'], $condition);
        }
        if($this->_model===null)
            throw new CHttpException(404,'The requested page does not exist.');
    }
    return $this->_model;
}

주요 변경 사항은 loadModel() 메소드에 있습니다. 이 메서드는 GET 매개 변수 id 따라 Post 테이블에 문의를합니다. 게시물을 찾을 수 없거나, (사용자가 게스트로서) 게시물이 공개 또는 보관되지 않은 경우에는 404 HTTP 오류를 던집니다. 그렇지 않으면, 게시물 객체가 actionView() 에 반환, 전시를 위해 뷰 스크립트로 전달되는 것입니다.

Tip: Yii는 HTTP 예외 (CHttpException 인스턴스)를 포착하고 미리 정의 된 템플릿이나 사용자 지정 오류를 표시 합니다. yiic 에서 생성 된 기본 어플리케이션은 이미 사용자 지정 오류표시가 포함되어 있습니다.
파일/wwwroot/blog/protected/views/site/error.php 입니다. 이 파일을 수정하면 오류 표시를 사용자가 정의 할 수 있습니다.

view 스크립트 변경 문서의 표시에 관한 형식과 스타일을 변경할수 있는 곳입니다. 여기에서는 자세하게는 들어 가지 않습니다. 관심있는 분은 /wwwroot/blog/protected/views/post/view.php 를 참조 하세요.


2. index사용자 지정

view 작업과 마찬가지로 index 작업에서도 2 곳을 지정합니다. PostController 의 actionIndex () 메소드와 뷰 파일 /wwwroot/blog/protected/views/post/index.php 입니다. 주로 특정 태그에 결부 된 게시물의 목록에 대한 지원을 추가 해야 합니다.

public function actionIndex()
{
    $criteria=new CDbCriteria(array(
        'condition'=>'status='.Post::STATUS_PUBLISHED,
        'order'=>'update_time DESC',
        'with'=>'commentCount',
    ));
    if(isset($_GET['tag']))
        $criteria->addSearchCondition('tags',$_GET['tag']);
 
    $dataProvider=new CActiveDataProvider('Post', array(
        'pagination'=>array(
            'pageSize'=>5,
        ),
        'criteria'=>$criteria,
    ));
 
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

위 예제 처럼 우리는 첫 번째 게시물 목록을 검색하기위한 쿼리 기준을 만들 수 있습니다. 이 기준은 공개 된 게시물의 반환 순서를 업데이트하는것이며 시간은 내림차순으로한다는 내용입니다. 또한 나열 할 때 각 게시물의 댓글을 표시하고 싶기 때문에,commentCount 을 반환하는 내용도 있습니다. 기억 하고 있는지 모르겠지만, 이것은 Post::relations() 에서 선언 한 관계입니다.

사용자가 특정 태그를 가진 게시물을보고 싶어 경우에, 우리는 특정 태그를 찾아 기준에 검색 조건을 추가 하여 특정 태그만 찾게 합니다.

이 쿼리 기준을 사용하여 데이터 공급자를 만듭니다. 데이터 공급자는 주로 세 가지 일을 처리합니다. 먼저 데이터가 많을 때는 페이지 네이션 (페이징 처리)을합니다. 여기에서는 페이지 크기를 5로 설정하여 페이지 매김을 정의하고 있습니다. 그런 다음 사용자의 요구에 맞게 정렬을합니다. 마지막으로, 페이징과 정렬 된 데이터를 표시 용 위젯과 뷰 코드에 공급합니다.

actionIndex () 수정이 완료되면 index 뷰를 다음과 같이 수정합니다. 주요 변경 사항은 표시 문서를 사용자가 태그로 지정하면, h1 헤더를 추가하는 것입니다.

<?php if(!empty($_GET['tag'])): ?>
<h1>Posts Tagged with <i><?php echo CHtml::encode($_GET['tag']); ?></i></h1>
<?php endif; ?>
 
<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
    'template'=>"{items}\n{pager}",
)); ?>

위의 예에서 게시물 목록보기에 CListView 를 사용하고있는 것에 주목하십시오. 이 위젯은 개별 기사의 정보를 표시하는 부분 뷰 (partial view)를 필요 로합니다. 여기서 partial view로 지정 하고 있습니다. _view 은 /wwwroot/blog/protected/views/post/_view.php 입니다. 이 뷰 스크립트는 $ data 라는 로컬 변수를 사용하여 문서의 인스턴스에 액세스 할 수 있습니다.

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

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

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

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

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



게시물관리

게시물 관리라는 것은 주로 관리의 관점에서 게시물을 나열하고 모든 상태의 기사를 검색·갱신·삭제 할 수 있도록 하는 것을 의미합니다. 이러한 작업은 각각 admin 작업과 delete 작업을 수행하여 달성됩니다. yiic 의해 생성 된 코드는 별로 수정할 필요가 없습니다. 아래에서는 이러한 두 작업이 어떻게 구현되어 있는지를 설명합니다.

1. 표 형식의 게시물 목록
admin 작업은 모든 상태의 게시물이 표 형식으로 표시됩니다. 이 화면은 정렬 및 페이징을 지원합니다. 다음은PostController 의 actionAdmin() 메소드입니다.

public function actionAdmin()
{
    $model=new Post('search');
    if(isset($_GET['Post']))
        $model->attributes=$_GET['Post'];
    $this->render('admin',array(
        'model'=>$model,
    ));
}

위의 코드는 yiic 도구에 의해 생성 된 것으로, 어느 곳도 수정하지 않습니다. 먼저 Post 모델을 search 시나리오에 따라 만듭니다. 이 모델을 사용하여 사용자가 지정한 검색 조건을 수집 하고 있습니다. 다음 사용자가 지정한 데이터가 있으면 모델에 할당합니다. 마지막으로이 모델을 사용하여 admin 뷰를 표시합니다.

다음은 admin 화면을 위한 코드입니다.

<?php
$this->breadcrumbs=array(
    'Manage Posts',
);
?>
<h1>Manage Posts</h1>
 
<?php $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'name'=>'title',
            'type'=>'raw',
            'value'=>'CHtml::link(CHtml::encode($data->title), $data->url)'
        ),
        array(
            'name'=>'status',
            'value'=>'Lookup::item("PostStatus",$data->status)',
            'filter'=>Lookup::items('PostStatus'),
        ),
        array(
            'name'=>'create_time',
            'type'=>'datetime',
            'filter'=>false,
        ),
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

게시물을 보기 위해 CGridView 을 사용합니다. 이것을 사용하면 열에서 정렬하거나 기사가 많아서 1 페이지에 표시되지 않을 때 페이징 처리를 할 수 있습니다. 주요 변경 사항은 각 컬럼의 표시 방법입니다. 예를 들어, title 컬럼 문서의 정보 표시에 대한 하이퍼 링크가 되도록 지정했습니다. $data->url 이라는 표현은 Post 클래스에 정의 된 url 속성 값을 반환합니다.

팁: 텍스트를 표시 할 때 텍스트에 포함 된 HTML 엔티티 (특수 문자)을 인코딩하는 데 CHtml::encode() 를 호출 합니다. 크로스 사이트 스크립팅 을 방지합니다.


2. 게시물삭제
admin 데이터 그리드는 각 행에 삭제 버튼이 있습니다. 삭제 버튼을 클릭하면 해당 게시물이 삭제됩니다. 내부적으로는, 클릭으로 인한 delete 작업은 다음과 같이 구현 되어 있습니다.

public function actionDelete()
{
    if(Yii::app()->request->isPostRequest)
    {
        // we only allow deletion via POST request
        $this->loadModel()->delete();
 
        if(!isset($_GET['ajax']))
            $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}

위의 코드는 yiic 도구에 의해 생성 된 것으로, 어느곳도 수정하지 않습니다. $ _GET [ 'ajax'] 검사에 대해 조금 설명하겠습니다. CGridView 위젯은 정렬, 페이징 매김 및 삭제 작업이 모두 AJAX 모드에서 수행되는 아주 좋은 기능이 있습니다. 위의 작업중 하나를 수행하는 경우 전체 페이지가 다시 리로드 되지 않는 다는 것입니다. 그렇다고는해도, AJAX가 아닌 모드에서 위젯이 작동하는 경우도 있습니다 (위젯 ajaxUpdate 속성을 false로 설정 한 경우, 또는 클라이언트의 JavaScript이 비활성화되어있는 경우). delete 작업은이 두 시나리오를 구분해야합니다. 즉, 삭제 요청이 AJAX를 통해 오는 경우 브라우저를 리디렉션하지 않고, 그렇지 않은 경우는 리디렉션해야합니다.

게시물을 삭제하면 문서에 붙은 댓글도 모두 삭제해야합니다. 또한 삭제 된 게시물에서 사용하던 태그에 관해서tbl_tag 테이블을 업데이트해야합니다. 이러한 작업은 모두 Post 모델 클래스의 afterDelete 방법을 다음과 같이 작성하여 제공 할 수 있습니다.

protected function afterDelete()
{
    parent::afterDelete();
    Comment::model()->deleteAll('post_id='.$this->id);
    Tag::model()->updateFrequency($this->tags, '');
}

위의 코드는 매우 간단합니다. 먼저 삭제 게시물의 ID와 같은 post_id 를 가지는 코멘트를 삭제합니다. 그런 다음 삭제 게시물의 tags에 관해서 tbl_tag 테이블을 업데이트 합니다.

Tip: 여기에서는 게시물 삭제의 모든 의견을 명시 적으로 삭제 해야합니다. 왜냐하면 SQLite가 외부 키 제약을 지원하지 않기 때문입니다. 이 제약을 지원하는 DBMS (MySQL 및 PostgreSQL 등)를 사용하는 경우, 기사의 삭제시 관련 코멘트가 자동으로 삭제되도록 외부 키 제약을 설정할 수 있습니다. 이 경우 코드에서 명시 적으로 삭제 처리를 호출 할 필요가 없습니다.

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

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

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

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

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



Comment 모델의 정의 

Comment 모델은 주로 rules () 메소드와 attributeLabels () 메서드를 정의합니다. attributeLabels () 메서드는 속성 이름과 속성의 레이블 대응표를 돌려줍니다. relations () 는 yiic 도구에서 생성 된 코드로 충분하기 때문에 별도로 손댈 필요가 없습니다.

1. rules() 메소드의 정의

먼저 yiic 도구에서 생성 한 검증 규칙을 정의합니다. 주석에 대한 규칙은 다음과 같습니다.

public function rules()
{
    return array(
        array('content, author, email', 'required'),
        array('author, email, url', 'length', 'max'=>128),
        array('email','email'),
        array('url','url'),
    );
}

위의 지정 내용은 다음과 같은 의미입니다. author , email , content 속성은 필수, author , email , url 은 최대 128 자, email 속성은 유효한 이메일 주소임을, url 속성은 유효한 URL이어야합니다.


2. attributeLabels() 메소드의 정의

다음 attributeLabels() 메서드를 정의하여 모델의 각 특성을 볼 때 레이블을 선언합니다. 이 방법은 name-label 쌍으로 구성되는 배열을 돌려줍니다. CHtml::activeLabel() 를 호출하면 각속성의 레이블을 볼 수 있습니다.

public function attributeLabels()
{
    return array(
        'id' => 'Id',
        'content' => 'Comment',
        'status' => 'Status',
        'create_time' => 'Create Time',
        'author' => 'Name',
        'email' => 'Email',
        'url' => 'Website',
        'post_id' => 'Post',
    );
}

팁:attributeLabels() 에서 속성 레이블을 선언하지 않는 경우, 알고리즘에 따라 적절한 레이블이 생성됩니다. 예를 들어, create_time 이나 createTime 라는 특성은 Create Time 레이블이 생성됩니다.


3. 저장 프로세스의 정의

댓글 작성 시간을 기록하고 싶기 때문에, Post 모델과 마찬가지로 Comment 의 beforeSave() 메서드를 재정의합니다.

protected function beforeSave()
{
    if(parent::beforeSave())
    {
        if($this->isNewRecord)
            $this->create_time=time();
        return true;
    }
    else
        return false;
}

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

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

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

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

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



코멘트의 작성과 표시 

  1. 댓글보기
  2. 댓글 작성
  3. AJAX 기반의 검증

이 섹션에서는 코멘트보기 및 작성 기능을 구현합니다.

사용자의 상호 작용을 향상시키기 위해, 입력란에 입력이 확정 될 때마다 오류 표시를합니다. 이른바 클라이언트 측 유효성 검사 (client-side input validation)입니다. 이를 Yii에서하는 방법을 설명합니다. 매우 쉽고 완벽하게 작업이 되는것을 볼수 있습니다. 이 기능은 Yii 버전 1.1.1 이상에서만 지원되는 기능입니다.


1. 댓글보기

댓글 표시·작성을 별도의 페이지를 사용하는 대신에 게시물의 상세 페이지 (PostController 의 view 액션에서 생성되는)를 사용합니다. 게시물 내용의 표시 아래에 먼저 그 기사에 속하는 코멘트를 나열하고 다음 댓글 양식을 표시합니다.

게시물 상세 페이지에 코멘트를 표시하기 위해 뷰 스크립트 /wwwroot/blog/protected/views/post/view.php 을 다음과 같이 수정합니다.

...post view here...
 
<div id="comments">
    <?php if($model->commentCount>=1): ?>
        <h3>
            <?php echo $model->commentCount . 'comment(s)'; ?>
        </h3>
 
        <?php $this->renderPartial('_comments',array(
            'post'=>$model,
            'comments'=>$model->comments,
        )); ?>
    <?php endif; ?>
</div>

위의 예에서는 현재 게시물에 속하는 코멘트를 표시하기 위해 _comments 라는 부분 뷰를 지정하고 renderPartial() 을 호출 합니다. 뷰에서 $model->comments 형식을 사용하여 문서에 속하는 댓글을 취득하고있는 것에 명심하세요. 이 형식을 사용한 이유는 Post 클래스 comments 관계를 선언하고 있기 때문입니다. 이 형식을 계산하면 암시 적으로 데이터베이스의 JOIN 쿼리가 실행되고 적절한 코멘트가 반환됩니다. 이 기능은 지연 관계형 쿼리 로 알려져 있습니다.

부분 뷰 (partial view)의 _comments 그다지 흥미로운 것은 없습니다. 코멘트를 하나 하나 처리, 코멘트 정보를 표시합니다. 관심있는 분은 /wwwroot/yii/demos/blog/protected/views/post/_comments.php 를 참조하십시오.

2. 댓글 작성

댓글 작성을 처리하기 위해 PostController 의 actionView () 메서드를 다음과 같이 수정합니다.

public function actionView()
{
    $post=$this->loadModel();
    $comment=$this->newComment($post);
 
    $this->render('view',array(
        'model'=>$post,
        'comment'=>$comment,
    ));
}
 
protected function newComment($post)
{
    $comment=new Comment;
    if(isset($_POST['Comment']))
    {
        $comment->attributes=$_POST['Comment'];
        if($post->addComment($comment))
        {
            if($comment->status==Comment::STATUS_PENDING)
                Yii::app()->user->setFlash('commentSubmitted','Thank you for your comment. Your comment will be posted once it is approved.');
            $this->refresh();
        }
    }
    return $comment;
}

그리고 Post 모델 클래스를 수정하여 addComment() 메서드를 다음과 같이 추가합니다.

public function addComment($comment)
{
    if(Yii::app()->params['commentNeedApproval'])
        $comment->status=Comment::STATUS_PENDING;
    else
        $comment->status=Comment::STATUS_APPROVED;
    $comment->post_id=$this->id;
    return $comment->save();
}

위 코드는 view 를 표시하기 전에 newComment() 메서드를 부릅니다. newComment() 메서드는 Comment 인스턴스를 생성하고, 코멘트 양식이 제출되었는지 여부를 확인합니다. 만약 전송이 된 경우, $post->addComment($ comment) 을 불러 기사에 코멘트를 추가 하려고 합니다. 문제가 없이 진행되면 기사의 상세 페이지를 새로 고침합니다. 다시 나타난 페이지는 코멘트가 승인되지 않으면 새로 게시 된 의견이 표시됩니다. 표시 전에 댓글 승인이 필요한 경우는 플래시 메시지를 사용하여 승인이 필요하다는 것을 사용자에게 보여줍니다. 플래시 메시지는 주로 최종 사용자에게 메시지를 보여주는 것입니다. 사용자가 브라우저의 새로 고침 버튼을 클릭하면 메시지가 사라집니다.

물론 /wwwroot/blog/protected/views/post/view.php 를 수정합니다.

......
<div id="comments">
    ......
    <h3>Leave a Comment</h3>
 
    <?php if(Yii::app()->user->hasFlash('commentSubmitted')): ?>
        <div class="flash-success">
            <?php echo Yii::app()->user->getFlash('commentSubmitted'); ?>
        </div>
    <?php else: ?>
        <?php $this->renderPartial('/comment/_form',array(
            'model'=>$comment,
        )); ?>
    <?php endif; ?>
 
</div><!-- comments -->

위 코드는 플래시 메시지가 있으면 메시지를 표시합니다. 만약 없다면 부분 뷰/wwwroot/blog/protected/views/comment/_form.php 을 사용하여 댓글 입력 폼을 표시합니다.


3. AJAX 기반의 정의 

사용자 경험을 향상시키기 위해, AJAX 기반의 폼 필드 검증을 사용할 수 있습니다. AJAX 기반의 검증은 사용자가 양식 항목에 입력을 할 때마다 검증 피드백을 얻을 수 있습니다. 즉, 전체 양식을 서버로 전송하기 전에 검증 피드백을 얻을 수 있습니다. 댓글 입력 폼에 AJAX 기반의 검증을 지원하기 위해, 코멘트 양식보기 /wwwroot/blog/protected/views/comment/_form.php  과 newComment() 메서드 모두에서 코드 변경을 해야 합니다.

_form.php 는 CActiveForm 위젯을 만들 때, CActiveForm::enableAjaxValidation 을 true로 설정합니다.

<div class="form">
 
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'comment-form',
    'enableAjaxValidation'=>true,
)); ?>
......
<?php $this->endWidget(); ?>
 
</div><!-- form -->

그리고 newComment() 메소드에서 AJAX 확인 요청에 응답하는 코드를 추가합니다. 이 코드는 ajax 라는 POST변수가 있는지 확인합니다. 있다면, CActiveForm::validate 를 불러 검증 결과를 표시합니다.

protected function newComment($post)
{
    $comment=new Comment;
 
    if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form')
    {
        echo CActiveForm::validate($comment);
        Yii::app()->end();
    }
 
    if(isset($_POST['Comment']))
    {
        $comment->attributes=$_POST['Comment'];
        if($post->addComment($comment))
        {
            if($comment->status==Comment::STATUS_PENDING)
                Yii::app()->user->setFlash('commentSubmitted','Thank you for your comment. Your comment will be posted once it is approved.');
            $this->refresh();
        }
    }
    return $comment;
}

이 곳은 제가 개인적으로 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. 를 참조하십시오.

+ Recent posts

티스토리 툴바