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

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


Для чого реклама?