Управление комментариями

Управление комментариями включает обновление, удаление и одобрение комментариев. Эти операции реализованы как действия класса CommentController.

1. Обновление и удаление комментариев

Код, сгенерированный утилитой Gii для обновления и удаления комментариев, остается, в основном, неизменным.

2. Одобрение комментариев

Недавно созданные комментарии находятся в статусе ожидающих одобрения и должны быть одобрены, чтобы стать видимыми для гостевого пользователя. Одобрение комментария — это, главным образом, изменение столбца состояния комментария.

Мы создаем метод actionApprove() в классе CommentController следующим образом,

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

Выше, когда действие approve вызывается через запрос POST, мы вызываем метод approve(), определенный в модели Comment, для изменения статуса. Затем мы переадресовываем браузер пользователя к странице, отображающей запись, к которой относится этот комментарий.

Естественно, потребуется создать и сам метод approve в модели Comment:

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

Здесь мы просто выставляем свойство status комментария в approved согласно значению соответсвующей константы класса Comment:

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

Затем мы вызываем метод update() для того, чтобы сохранить выставленное свойство в БД.

Мы также изменяем метод actionIndex() контроллера CommentController, чтобы показать все комментарии и вывести ожидающие одобрения первыми.

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_comment. Сам конфликт возникает так как и в tbl_post и в tbl_comment есть столбцы status и create_time.

Сделать это можно путём использования псевдонимов таблиц. Как описано в руководстве, псевдоним главной таблицы реляционного запроса всегда равен t. Поэтому, мы добавляем t к полям status и create_time.

Как и отображение записей, отображение index контроллера CommentController использует CListView для вывода списка комментариев, который, в свою очередь, использует /wwwroot/blog/protected/views/comment/_view.php для вывода каждого отдельного комментария. Мы не будем детально рассматривать данный механизм. Заинтересованные читатели могут изучить соответствующий файл демонстрационного приложения: /wwwroot/yii/demos/blog/protected/views/comment/_view.php.

Be the first person to leave a comment

Please to leave your comment.