我正在开发一个自定义论坛,并想知道人们会认为什么是将线程标记为已读的最佳方法。
我想显示线程的帖子图标,如果线程没有被读取,则它有一个未读图标,主题标题是粗体。如果已阅读,则主题标题为正常字体粗细,帖子图标将更改为读取图标。
最好的方法是在用户会话中存储他们查看过哪些线程并将其设置为标记所有超过48小时左右的线程?
谢谢!
答案 0 :(得分:2)
在我的头顶,我会保留一个单独的表,其中包含userId,threadId和lastVisted日期/时间。只需在用户查看线程时添加/更新相应的userId / ThreadId记录。
然后,当访问者查看某个帖子时,您知道在该用户的lastVistedDate之后发布的任何帖子都是新的,显然,如果没有LastVisted日期,您就知道一个帖子中的所有帖子都是新的。
答案 1 :(得分:2)
维护用户上次访问某个帖子的日期时间表
viewed_threads
列:user_id,thread_id,datetime
还要确保跟踪上次更新主题的时间
当用户打开帖子时
replace into viewed_thread ( user_id, thread_id, datetime ) values( $user_id, $thread_id, now() )
现在列出线程时,您可以检查用户上次访问该线程的日期时间的用户会话。如果最后查看的日期时间是在线程更新的最后一次之前,则它是“新的”
答案 2 :(得分:2)
创建第二个表格,例如:
thread_member: thread_id, member_id, read_flag, posted_flag, bookmarked_flag
基本上任何特定于该成员和线程的东西都可以进入那里。拉动线程列表时,LEFT JOIN对该表。如果read_flag为0
或NULL
,那么它就是新的。
SELECT * FROM thread t
LEFT JOIN thread_member tm ON t.id=tm.thread_id AND tm.member_id=$member_id
WHERE t.id=$thread_id
任何时候有人在线程中发布消息,只需运行此查询:
UPDATE thread_member SET read_flag=0 WHERE thread_id=$thread_Id
published_flag可用于确定该人是否在帖子中写了一条消息。
bookmarked_flag可用于确定该人是否为该帖子添加了书签。
要保持表格修剪,您可以截断所有未设置任何重要标记的旧记录。在此示例中,您可以删除所有未设置bookmark_flag的X天/周/月的记录。