Administrowanie komentarzami

Administrowanie komentarzami zawiera aktualizowanie, usuwanie oraz zatwierdzanie komentarzy. Operacje te są zaimplementowane jako akcje w klasie kontrolera CommentController.

1. Aktualizowanie i usuwanie komentarzy

Kod wygenerowany przez narzędzie yiic do aktualizowania oraz usuwania komentarzy pozostaje w większej części niezmieniony.

2. Zatwierdzanie komentarzy

Kiedy komentarz jest nowo utworzony, oczekuje on na zatwierdzenie i musi zostać zatwierdzony jeśli ma on być widoczny dla gości. Zatwierdzanie komentarza to przede wszystkim zmiana kolumny zawierającej status komentarza.

Utworzymy metodę actionApprove() w kontrolerze CommentController następująco:

public function actionApprove()
{
    if(Yii::app()->request->isPostRequest)
    {
        $comment=$this->loadModel();
        $comment->approve();
        $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400,'Invalid request...');
}

W powyższym kodzie, gdy akcja zatwierdzenia approve jest wywoływana poprzez żądanie POST, wywołujemy metodę approve() zdefiniowaną w modelu komentarza Comment aby zmienić status. Następnie przekierowujemy przeglądarkę użytkownika do strony wyświetlającej wiadomość, do której należy ten komentarz.

Oczywiście musimy najpierw utworzyć metodę approve() w modelu komentarza Comment. Wygląda ona następująco:

public function approve()
{
    $this->status=Comment::STATUS_APPROVED;
    $this->update(array('status'));
}

Po prostu ustawiamy w niej właściwość status modelu komentarza na wartość approved określoną przez stałe statusu znajdujące się w klasie Comment:

class Comment extends CActiveRecord
{
    ...
 
    const STATUS_PENDING=1;
    const STATUS_APPROVED=2;
 
    ..
}

a następnie wywołujemy metodę update() aby zapisać tę nowo ustawioną właściwość do bazy danych.

Modyfikujemy również metodę actionIndex() kontrolera CommentController aby wyświetlała listę wszystkich komentarzy. Na samym początku chcielibyśmy wyświetlić komentarze wymagające zatwierdzenia.

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,
    ));
}

Zauważ, że w powyższym kodzie, ze względu na to, że obie tabele tbl_post oraz tbl_comment posiadają kolumnę statusu status i czasu utworzenia create_time, potrzebujemy rozróżnić odpowiednie referencje do kolumny poprzez dodanie im prefiksu z aliasem nazwy tablicy. Tak jak to opisano w poradniku, alias dla głównego klucza tabeli w tabeli relacyjnej zawsze ma wartość t. Dlatego też dodaliśmy w powyższym kodzie prefiks t do kolumn statusu status oraz czasu utworzenia create_time aby zasygnalizować, że chcemy pobrać te wartości z tabeli podstawowej tbl_comment.

Tak jak widok index dla wiadomości, tak i widok index dla CommentController używa klasy CListView aby wyświetlić listę komentarzy, która to z kolei używa częściowego widoku /wwwroot/blog/protected/views/comment/_view.php aby wyświetlić szczegóły poszczególnych komentarzy. Nie będziemy tutaj wchodzić w szczegóły. Zainteresowani czytelnicy mogą zajrzeć do odpowiednich plików w demo blogu /wwwroot/yii/demos/blog/protected/views/comment/_view.php.

$Id: comment.admin.txt 3480 2011-12-13 03:12:21Z jefftulsa $

Be the first person to leave a comment

Please to leave your comment.