Управління коментарями ====================== Управління коментарями включає оновлення, видалення та схвалення коментарів. Ці операції реалізовані як дії класу `CommentController`. Оновлення та видалення коментарів --------------------------------- Код, що згенеровано утилітою `Gii` для оновлення та видалення коментарів, залишається, в основному, незмінним. Схвалення коментарів -------------------- Нещодавно створені коментарі перебувають у статусі очікування схвалення і повинні бути схвалені, щоб стати видимими для гостьового користувача. Схвалення коментаря - це, головним чином, зміна стовпця стану коментаря. Ми створюємо метод `actionApprove()` у класі `CommentController` наступним чином: ~~~ [php] 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`: ~~~ [php] public function approve() { $this->status=Comment::STATUS_APPROVED; $this->update(array('status')); } ~~~ Тут ми просто виставляємо властивість `status` коментаря у `approved` згідно значенню відповідної константи класу `Comment`: ~~~ [php] class Comment extends CActiveRecord { ... const STATUS_PENDING=1; const STATUS_APPROVED=2; .. } ~~~ Потім ми викликаємо метод `update()` для того, щоб зберегти виставлену властивість у БД. Ми також змінюємо метод `actionIndex()` контролера `CommentController`, щоб показати всі коментарі і вивести першими ті, що очікують схвалення. ~~~ [php] 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`. Зробити це можна шляхом використання псевдонімів таблиць. Як описано у [керівництві](/doc/guide/uk/database.arr#disambiguating-column-names), псевдонім головної таблиці реляційного запиту завжди дорівнює `t`. Тому, ми додаємо `t` до полів `status` та `create_time`. Як і відображення записів, відображення `index` контролера `CommentController` використовує [CListView] для виведення списку коментарів, який, у свою чергу, використовує `/wwwroot/blog/protected/views/comment/_view.php` для виведення кожного окремого коментаря. Ми не будемо детально розглядати цей механізм. Зацікавлені читачі можуть вивчити відповідний файл демонстраційного додатку: `/wwwroot/yii/demos/blog/protected/views/comment/_view.php`.