0 追蹤者

管理評論

評論管理包含更新、刪除和核准評論。這些操作實作為 CommentController 類別中的動作。

1. 更新與刪除評論

Gii 產生的用於更新和刪除評論的程式碼基本上保持不變。

2. 核准評論

當評論剛建立時,它們處於待核准狀態,需要核准才能對訪客使用者可見。核准評論主要是變更評論的狀態欄位。

我們在 CommentController 中建立一個 actionApprove() 方法,如下所示:

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() 方法。它如下所示:

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

在這裡,我們只是將評論的狀態屬性設定為 approved,如同 Comment 類別中的狀態常數所定義的那樣

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

然後呼叫 update() 方法,將這個新設定的屬性儲存到資料庫。

我們也修改 CommentControlleractionIndex() 方法,以顯示所有評論。我們希望看到待核准的評論首先顯示。

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_posttbl_comment 都具有 statuscreate_time 欄位,因此我們需要透過在它們前面加上表格別名來消除對應欄位參考的歧義。如 指南 中所述,關係查詢中主要表格的別名始終為 t。因此,我們在上面的程式碼中將 t 作為字首加到 statuscreate_time 欄位,以表示我們希望從主要表格 tbl_comment 中取得這些值。

如同文章索引檢視,CommentControllerindex 檢視使用 CListView 來顯示評論列表,而評論列表又使用部分檢視 /wwwroot/blog/protected/views/comment/_view.php 來顯示每個個別評論的詳細資訊。我們在這裡不會深入探討細節。感興趣的讀者可以參考部落格示範中的相應檔案 /wwwroot/yii/demos/blog/protected/views/comment/_view.php

發現錯字或您認為此頁面需要改進?
在 github 上編輯 !