Files
yii/docs/blog/pl/comment.admin.txt
2012-01-01 03:05:53 +00:00

88 lines
3.6 KiB
Plaintext

Administrowanie komentarzami
=================
Administrowanie komentarzami zawiera aktualizowanie, usuwanie oraz zatwierdzanie komentarzy. Operacje te są zaimplementowane jako akcje w klasie kontrolera `CommentController`.
Aktualizowanie i usuwanie komentarzy
------------------------------
Kod wygenerowany przez narzędzie `yiic` do aktualizowania oraz usuwania komentarzy pozostaje w większej części niezmieniony.
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:
~~~
[php]
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:
~~~
[php]
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`:
~~~
[php]
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.
~~~
[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,
));
}
~~~
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](http://www.yiiframework.com/doc/guide/database.arr#disambiguating-column-names), 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`.
<div class="revision">$Id: comment.admin.txt 3480 2011-12-13 03:12:21Z jefftulsa $</div>