
Управління коментарями включає оновлення, видалення та схвалення коментарів.
Ці операції реалізовані як дії класу CommentController.
Код, що згенеровано утилітою Gii для оновлення та видалення коментарів,
залишається, в основному, незмінним.
Нещодавно створені коментарі перебувають у статусі очікування схвалення і повинні бути схвалені, щоб стати видимими для гостьового користувача. Схвалення коментаря - це, головним чином, зміна стовпця стану коментаря.
Ми створюємо метод actionApprove() у класі CommentController наступним чином:
phppublic 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:
phppublic function approve() { $this->status=Comment::STATUS_APPROVED; $this->update(array('status')); }
Тут ми просто виставляємо властивість status коментаря у approved згідно
значенню відповідної константи класу Comment:
phpclass Comment extends CActiveRecord { ... const STATUS_PENDING=1; const STATUS_APPROVED=2; .. }
Потім ми викликаємо метод update() для того, щоб зберегти виставлену властивість у БД.
Ми також змінюємо метод actionIndex() контролера CommentController,
щоб показати всі коментарі і вивести першими ті, що очікують схвалення.
phppublic 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.