Управление комментариями включает обновление, удаление и одобрение комментариев.
Эти операции реализованы как действия класса 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
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.