Управління коментарями включає оновлення, видалення та схвалення коментарів.
Ці операції реалізовані як дії класу 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,'Невірний запит...');
}
Вище, коли дія 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.