mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 11:06:54 +01:00
105 lines
4.7 KiB
Plaintext
105 lines
4.7 KiB
Plaintext
Управление комментариями
|
|
========================
|
|
|
|
Управление комментариями включает обновление, удаление и одобрение комментариев.
|
|
Эти операции реализованы как действия класса `CommentController`.
|
|
|
|
|
|
Обновление и удаление комментариев
|
|
----------------------------------
|
|
|
|
Код, сгенерированный утилитой `yiic` для обновления и удаления комментариев,
|
|
остается, в основном, неизменным.
|
|
|
|
Одобрение комментариев
|
|
----------------------
|
|
|
|
Недавно созданные комментарии находятся в статусе ожидающих одобрения и должны быть одобрены, чтобы стать видимыми для гостевого пользователя. Одобрение комментария — это, главным образом, изменение столбца состояния комментария.
|
|
|
|
Мы создаем метод `actionApprove()` в классе `CommentController` следующим образом,
|
|
|
|
~~~
|
|
[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...');
|
|
}
|
|
~~~
|
|
|
|
Выше, когда действие `approve` вызывается через запрос POST, мы вызываем метод
|
|
`approve()`, определенный в модели `Comment`, для изменения статуса. Затем мы
|
|
переадресовываем браузер пользователя к странице, отображающей запись, к которой
|
|
относится этот комментарий.
|
|
|
|
Естественно, потребуется создать и сам метод `approve` в модели `Comment`:
|
|
|
|
~~~
|
|
[php]
|
|
public function approve()
|
|
{
|
|
$this->status=Comment::STATUS_APPROVED;
|
|
$this->update(array('status'));
|
|
}
|
|
~~~
|
|
|
|
Здесь мы просто выставляем свойство `status` комментария в `approved` согласно значению соответсвующей константы класса `Comment`:
|
|
|
|
~~~
|
|
[php]
|
|
class Comment extends CActiveRecord
|
|
{
|
|
...
|
|
|
|
const STATUS_PENDING=1;
|
|
const STATUS_APPROVED=2;
|
|
|
|
..
|
|
}
|
|
~~~
|
|
|
|
Затем мы вызываем метод `update()` для того, чтобы сохранить выставленное свойство в БД.
|
|
|
|
Мы также изменяем метод `actionIndex()` контроллера `CommentController`, чтобы показать
|
|
все комментарии и вывести ожидающие одобрения первыми.
|
|
|
|
~~~
|
|
[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,
|
|
));
|
|
}
|
|
~~~
|
|
|
|
Стоит отметить, что в коде выше необходимо разрешить конфликт имён столбцов указав, что нам необходимы значения из
|
|
основной таблицы `tbl_comment`. Сам конфликт возникает так как и в `tbl_post` и в `tbl_comment` есть столбцы
|
|
`status` и `create_time`.
|
|
|
|
Сделать это можно путём использования псевдонимов таблиц.
|
|
Как описано [в руководстве](/doc/guide/ru/database.arr#disambiguating-column-names),
|
|
псевдоним главной таблицы реляционного запроса всегда равен `t`. Поэтому, мы
|
|
добавляем `t` к полям `status` и `create_time`.
|
|
|
|
Как и отображение записей, отображение `index` контроллера `CommentController`
|
|
использует [CListView] для вывода списка комментариев, который, в свою очередь,
|
|
использует `/wwwroot/blog/protected/views/comment/_view.php` для вывода каждого
|
|
отдельного комментария. Мы не будем детально рассматривать данный механизм.
|
|
Заинтересованные читатели могут изучить соответствующий файл демонстрационного
|
|
приложения: `/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> |