3

我在我的网站通知中,类似于 facebook。但我只有 3 种类型的通知:

  • [昵称] 给你发了一个新的测验 [测验名称]
  • [昵称] 将您添加到他的群组 [群组名称]。接受 | 否定
  • 您今天获得了 100 美元的登录积分。

表通知

通知ID | 类型 | item_id | from_id | to_id | 创建 | 通知

item_id 代表 quize_id 或 group_id。我进行了额外的连接以获取所有数据。

我遇到的一个问题是如何显示每个通知取决于类型。选项之一是组织字符串以在控制器中显示:

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 的架构,这意味着您将不得不使用helpers,从而使您远离受 MVC 启发的设计模式。

于 2012-09-10T11:44:22.710 回答