我有一个简单的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¬ification=1)来确定哪个对象等。
我不建议使用Javascript来做到这一点...在我看来,这太不可靠了。你永远不知道用户是否真的在他们的浏览器上启用了Javascript等等。