Управление комментариями
Управление комментариями включает обновление, удаление и одобрение комментариев.
Эти операции реализованы как действия класса 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.