如图所示,将代码放在哪里以触发标记通知


Where to put the code to trigger marking notification as seen

我有一个简单的MySQL表,用于将通知存储在具有PHP编写的社交网络功能的Web中。

+----------------------+
| Notifications        |
+----------------------+
| (PK) notification_id |
| user_id              |
| uri                  |
| message              |
| seen                 |
| created_at           |
+----------------------+
  • notification_id是PK(不言自明)
  • user_id是收到通知的用户的 ID
  • uri 是用户单击通知时浏览器将转到的内部 URI,大多数情况下它链接到单个发生的事件页面(例如,当通知是关于某人评论时,链接到用户的照片永久链接)
  • 消息
  • 是通知消息
  • seen存储为布尔值,它表示通知是否已被读取(这是这个问题中最重要的部分)
  • created_at只是一个时间戳

我已经完成了大部分通知机制,但剩下的是可见/不可见的部分。

我只想在顶部导航栏的下拉菜单中显示看不见的通知(就像Facebook一样),用户可以单击指向显示所有通知的页面的链接。

放置代码以触发将其标记为已见的最佳位置在哪里?当指定用户阅读通知内容并进入单个事件页面(即通过单击它)时,应将其标记为"已看到"

我想到了一些方法,欢迎另一种选择。

  • 使用 javascript 拦截用户对通知的点击,并在继续通知的 URI 之前发出 ajax 请求"标记为已见"
  • 在目标 URL 中制作 PHP 脚本以更新数据库中看到的记录。此方法的问题在于单个帖子与通知记录之间没有关系

如果我遇到类似的情况(并且我没有实现事件系统),我会让通知链接指向传递脚本。在该脚本中,只需将其通知标记为已显示并将用户重定向到即可。由于您的通知和对象不相关,您可以使用 GET 请求参数(?type=photo&id=1&notification=1)来确定哪个对象等。

我不建议使用Javascript来做到这一点...在我看来,这太不可靠了。你永远不知道用户是否真的在他们的浏览器上启用了Javascript等等。