0

Yii で新しいポートレットを作成しています。このウィジェットは、問題の最新のコメントを表示します。問題にコメントがある場合にのみこれを表示し、問題にコメントがない場合は表示しません (イベント タイトル)。

したがって、ビューファイル内の私の疑似コードは次のとおりです。

コメント数の確認プロセス:

<?php
$countIssue = count($model->issues);
$i = 0; $j = 0;
while($i < $countIssue)
{
    $j += $model->issues[$i]->commentCount;
    $i ++;
}
?>

if ($countIssue >0 ) {
  if ($j >0)
  Display the widget
}

Else

Don't display the widget

私のコードが MVC モデルに適しているかどうか疑問に思っています。方向を教えていただけますか?Check number of comment 処理を Model か Controller に持っていくべきか、それとも上記の MVC パターンでよろしいでしょうか?

ありがとうございました!

4

2 に答える 2

0

これを行うには、MVC に適した方法がたくさんあると思います。主なアイデアは、モデルにデータ ロジックを配置し、コントローラを介してリクエストを処理することです。理想的には、ビューは表示目的にのみ使用する必要があります。

個人的には、Yiiの名前付きスコープ(元は Rails に由来) を使用して、次のような最新のフィルターを実現します。

モデル:

class Comment extends CActiveRecord
{
  ......
  public function scopes()
  {
    return array(
        'recently'=>array(
            'order'=>'create_time DESC',
            'limit'=>5,
        ),
    );
  }
}

問題にのみコメントがある場合にリストのコメントを取得するには、Controllerで次のようなことを行うことができます。

if($issue->comments)
  $isseComments = Comment::model()->recently()->findAll(); //using the named scope to the recent ones only

$this->render('your_action',array(
      .....
      'issue' => $issue,
      'issueComments'=>$isseComments,
));

そして、あなたのビューはきちんと整頓されたままになります:

if($issueComments > 0)
  //Display the widget
else
  // Don't
于 2012-08-09T14:19:00.050 に答える
0

まず、このロジックをポートレット クラス (CPorlet を拡張するクラス) の run() メソッドに移動します。

次に、Issue クラスでSTAT リレーションを定義します。この関係はコメントのカウントのみを目的としており、次のようなステートメントを使用できます。

$issue = Issue::model()->findByPk($issue_id);
// $comments_count below is exactly what you would expect... .
$comments_count = $issue->commentsCount;

最後に、すべてを組み合わせて、ポートレットの run() メソッド内で次のようにアプローチすることをお勧めします。

If ($someIssue->commentsCount > 0) {
  // do something and in the end, when you want to render the portlet, you do...
  $this->render("view_file_name");
}
于 2012-08-09T13:39:31.997 に答える