0 follower

Управління коментарями

Управління коментарями включає оновлення, видалення та схвалення коментарів. Ці операції реалізовані як дії класу CommentController.

1. Оновлення та видалення коментарів

Код, що згенеровано утилітою Gii для оновлення та видалення коментарів, залишається, в основному, незмінним.

2. Схвалення коментарів

Нещодавно створені коментарі перебувають у статусі очікування схвалення і повинні бути схвалені, щоб стати видимими для гостьового користувача. Схвалення коментаря - це, головним чином, зміна стовпця стану коментаря.

Ми створюємо метод 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 !