mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 02:56:55 +01:00
88 lines
3.8 KiB
Plaintext
88 lines
3.8 KiB
Plaintext
コメントの管理
|
|
==============
|
|
|
|
コメントの管理には、コメントの更新・削除・承認があります。これらの操作は `CommentController` クラスのアクションとして実装します。
|
|
|
|
|
|
コメントの更新と削除
|
|
--------------------
|
|
|
|
`Gii` で生成したコードの、コメント更新・削除の部分はほとんど変更せずに使います。
|
|
|
|
|
|
コメントの承認
|
|
--------------
|
|
|
|
コメントが新しく作成されたとき、コメントは承認待ちの状態になります。ゲストユーザに見えるようにするためには承認が必要です。コメントの承認は、基本的にコメントの `status` カラムを変更するだけです。
|
|
|
|
`CommentController` に以下のような `actionApprove()` メソッドを作成します。
|
|
|
|
~~~
|
|
[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...');
|
|
}
|
|
~~~
|
|
|
|
上記コードでは、POST リクエスト経由で `approve` アクションが呼ばれたときに、`Comment` モデルで定義した `approve()` メソッドを呼んでステータスを変更します。それから、このコメントが属する記事を表示するページに、ブラウザをリダイレクトします。
|
|
|
|
もちろん、上記に加えて、`Comment` モデルに `approve()` メソッドを作成する必要もあります。以下のようにします。
|
|
|
|
~~~
|
|
[php]
|
|
public function approve()
|
|
{
|
|
$this->status=Comment::STATUS_APPROVED;
|
|
$this->update(array('status'));
|
|
}
|
|
~~~
|
|
|
|
していることは単純なことです。まず、コメントの `status` プロパティに `Comment` クラスで定義されている `承認済み` 状態を示す定数をセットします。
|
|
|
|
~~~
|
|
[php]
|
|
class Comment extends CActiveRecord
|
|
{
|
|
...
|
|
|
|
const STATUS_PENDING=1;
|
|
const STATUS_APPROVED=2;
|
|
|
|
..
|
|
}
|
|
~~~
|
|
|
|
そして、次に、`update()` メソッドを呼んで新しくセットされたプロパティをデータベースに保存します。
|
|
|
|
さらに、すべてのコメントを表示するために `CommentController` の `actionIndex()` メソッドを修正します。承認待ちのコメントを先頭に表示するようにします。
|
|
|
|
~~~
|
|
[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_post` と `tbl_comment` の両方に `status` と `create_time` というカラムがあるので、曖昧さを無くすためにテーブルのエイリアス名を接頭辞として付ける必要があります。[ガイド](http://www.yiiframework.com/doc/guide/ja/database.arr#sec-6) に記述されているように、リレーショナルなクエリーでは、プライマリテーブルのエイリアスは常に `t` です。そのため上記コードでは、`status` カラムと `create_time` カラムに接頭辞 `t` を付けて、それらの値をプライマリテーブル (`tbl_comment`) から取得すべきことを示しています。
|
|
|
|
記事の index ビューのように、`CommentController` の `index` ビューでも [CListView] を使ってコメント一覧を表示します。部分的ビューとして `/wwwroot/blog/protected/views/comment/_view.php` を使って、個々のコメントの詳細を表示します。ここでは詳細には立ち入りません。興味のある方はブログデモの対応するファイル `/wwwroot/yii/demos/blog/protected/views/comment/_view.php` を参照してください。
|
|
|
|
<div class="revision">$Id$</div> |