3

私は自分のサイトの通知に、Facebook と同様のものを持っています。しかし、私は3種類の通知しか持っていません:

  • [ニックネーム] さんが新しいクイズ [クイズ名] を送信しました
  • [ニックネーム] があなたを彼のグループ [グループ名] に追加しました。受け入れる | 拒否
  • 今日のログインで 100 ドルのクレジットを受け取りました。

テーブル通知

通知 ID | タイプ | item_id | from_id | to_id | 作成 | 通知

item_id は quize_id または group_id を表します。すべてのデータを取得するために追加の結合を行います。

私が抱えている問題は、タイプに応じて各通知を表示する方法です。オプションの 1 つは、コントローラーに表示する文字列を整理することです。

foreach($results as $key => $result){
  switch($result['type']){
    case 1:
    $string = "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>";
    break;
    case 2:
    $string = "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>";
    break;
    case 3:
    $string = _("You received 100 credit for log in today");
  }
  $notifications[$key]['string'] = $string;
}

$data['notifications'] = $notifications;

$this->load->view('views/notifications/last_notification_view', $data);

その方法の問題は、ビューの一部がコントローラー内にあることです。大まかなデータを送信して表示することもできましたが、問題は同様の php コードを表示する必要があることです。では、どの方法が良いでしょうか?それとも他に方法はありますか?

4

2 に答える 2

4

私の個人的な意見では、$results をビューに渡し、結果を取得してビュー内のリンクを出力するループを作成する必要があります。あなたが持っているべきものは、コントローラーのこれです:

$data['notifications']=$results;
$this->load->view('views/notifications/last_notification_view', $data);

そしてこれはビューで:

foreach($data['notifications'] as $key => $result){
  switch($result['type']){
    case 1:
    echo "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>";
    break;
    case 2:
    echo "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>";
    break;
    case 3:
    echo _("You received 100 credit for log in today");
  }
}
于 2012-09-10T11:02:44.993 に答える
2

最良のオプションは、テンプレートを使用する代わりに実際のビューを作成することです。

このコードは明らかにプレゼンテーション ロジックの一部であり、MVC デザイン パターンのビューの範囲内にあります。残念ながら、CodeIgniter は Rails のようなアーキテクチャを使用しているため、ヘルパーを使用する必要があり、MVC にインスパイアされたデザイン パターンからさらに遠ざかってしまいます。

于 2012-09-10T11:44:22.710 に答える