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