Administrowanie komentarzami zawiera aktualizowanie, usuwanie oraz zatwierdzanie komentarzy. Operacje te są zaimplementowane jako akcje w klasie kontrolera CommentController
.
Kod wygenerowany przez narzędzie yiic
do aktualizowania oraz usuwania komentarzy pozostaje w większej części niezmieniony.
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
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.