当用户点击其收件箱中的链接时,我想将与该链接相关的邮件标记为seen
。
SO也有这个功能,
如果有人回复我的帖子,那么SO会显示我的帖子发生的事情
点击收件箱信息并访问帖子后,SO不再显示通知标记。
我猜每次用户访问任何问题页面时,如果访问某个问题的用户都有收件箱信息,那就太昂贵了。
我想知道是否可以在收件箱页面中捕获clicking-link
,以便我可以在引擎盖下发送ajax请求以标记消息as seen
希望我的问题很明确。
答案 0 :(得分:1)
为您单击的每封邮件添加自定义数据属性。我不确定你的显示信息,但是对于这个例子,我们将使用span:
<span class="message">Some Message</span>
和JS:
$(".message").click(function() {
$(this).data("visited", true);
});
然后你可以检查跨度,看看他们是否被访问过。如果你仍然想要进行AJAX调用,你也可以在click处理程序中添加一个AJAX事件。
答案 1 :(得分:0)
我假设你的消息表上有某种“状态”字段,以区分“读取”和“未读”。
如果您询问如何有效地将未读消息的数量存储在收件箱中而不在每个页面加载上运行查询,则可以通过设置$ _SESSION变量轻松完成此操作:
$_SESSION['unread_messages'] = 2;
设置此变量后,您可以定期检查(每5分钟左右)以在合理的窗口内保持最新状态。单击并阅读邮件时,您将从此值中减去1或重新查询未读邮件的数量。
如果您询问如何更新数据库和UI,有两种主要方法可以执行此操作。当用户点击邮件时,它将取决于脚本中当前发生的情况。您是否发出加载消息的AJAX请求,或链接是否将用户带到另一个页面?
如果在单击消息时发出AJAX请求,只需让在AJAX请求中调用的脚本也将消息标记为已读(在数据库中),并使用JavaScript对当前页面进行任何UI更新(例如删除点击的邮件上的粗体文字。)
如果单击某条消息会重定向到显示整条消息的其他页面,则可以在该页面加载时将该消息标记为已读取。