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

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

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

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

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

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

Мы создаем метод 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.


Зачем реклама?