我有我在php/mysql中編寫的用戶論壇,我想知道大牌論壇如何讓它顯示哪些主題有新帖子,通常是通過改變線程旁邊的圖標圖像而不用幾乎任何資源?論壇如何向您展示未讀主題?
回答
最簡單的方法是跟蹤上次某人登錄的時間。當他們回來訪問時,自那時起更新的所有內容顯然都是「新的」。
雖然這有一些問題,因爲有效註銷會將所有項目標記爲已讀。
我唯一能想到的方法就是維護一個包含每個用戶都看過的所有線程和最新帖子的表格。
user_id thread_id post_id
1 5 15
1 6 19
有了這些信息,如果線程#5中有一個ID大於15的帖子,那麼你知道那裏有未讀的帖子。僅使用該頁面上的最新帖子的post_id更新此表格。這意味着如果有3頁新帖子,並且用戶只查看第一個帖子,它仍然會知道有未讀帖子。
如上所述,除了用戶實際訪問的線程被跟蹤之外。所以用戶沒有訪問過的任何東西都被認爲是該訪問者的新東西。爲了更細粒度的控制,在用戶註冊之前創建的任何線程都將被忽略,並且可能忽略在一段時間內未訪問的任何線程。這會阻止每一個未訪問的線程成爲他們的新線程。
當然有很多方法對皮膚一隻貓,並根據什麼論壇創想上面可以改變,以適應
DC
vbulletin和phpbb等論壇,他們將允許您點擊一個鏈接,並將每個主題設置爲已讀 – JasonDavis 2010-01-04 04:02:25
您可以登錄他們選擇該主題的最後時間,然後看看帖子是否有更晚的時間戳,然後是他們最後的「點擊」線程。
您可以在數據庫中使用USER_ID和THREAD_ID列以及對USER和THREAD表以及包含USER和THREAD ID的主鍵的適當約束在數據庫中創建一個特殊表。
現在,當有人打開一個線程時,只需將該USER-THREAD-PAIR插入到該特殊表中即可。
在您的線程列表中,您現在可以簡單地將該表外連接到適合您使用的那個表上。如果你的新表在任何特定點上都包含NULL,那麼這個線程是未讀的。這將使像列表:
- 所有主題爲「未讀」標記
- 所有未讀線程
- 線程如果添加日期列這個表由用戶XY
閱讀,可以做更有趣的東西。
只要留意您的鑰匙和索引,以防止過重的負面性能影響。嘗試從USER-THREAD表中讀取,只需將其加入到您現有的查詢中即可。這將比始終執行單個查詢的速度快得多。
如果讀取的線程尚未讀取,您可以有一張表,每次線程讀取時都會獲取插入。然後,當有人添加到該線程時,您可以刪除該線程表中的所有條目,從而使所有用戶都不讀取。
表結構會是這樣的
forum_id thread_id user_id
通過可選的額外has_read_id
爲您的主鍵,與其他領域做一個複合鍵。
是的我在想,但希望有一個更好的解決方案(少讀和寫)我要研究如何vbulletin和phpbb和其他工作可能會揭示更好的解決方案 – JasonDavis 2010-01-04 16:05:26
phpBB必須做一些不同的事情。當我登錄到elitebastards.com並查看新帖子列表(自從我上次訪問後新增)時,在會話超時後,新帖子列表爲空,即使我沒有訪問過列表中的所有線程。但是,如果我去尋找它們,線程仍然被標記爲未讀。 – 2010-01-04 16:46:26
- 1. bbPress - 論壇不顯示主題,而主題顯示論壇
- 2. 論壇主題訂閱
- 3. PHP論壇 - 閱讀/未讀帖子
- 4. 論壇帖子「閱讀」和「未讀」
- 5. 如何在buddypress的論壇中顯示所有主題?
- 6. Jsoup:從論壇獲取主題標題
- 7. 如何顯示論壇帖子的未讀/已讀狀態,如vbulletin,phpbb,其他?
- 8. 論壇未讀郵件實施
- 9. Drupal的論壇主題鎖定
- 10. REGEX替換論壇主題的線
- 11. Phpbb論壇加入同一主題toghether
- 12. 論壇,獲得最後發佈/主題
- 13. 在C#中向vbulletin論壇提交新主題#
- 14. 如何閱讀別人的論壇
- 15. 自定義PHP論壇 - 顯示新/未讀帖子
- 16. IP論壇問題
- 17. 顯示論壇,但隱藏裏面的主題
- 18. 在Android中顯示php論壇主題列表
- 19. 從我的論壇中獲取所有主題他們在medoo的子論壇
- 20. SQL-如何提取非重複的論壇主題?
- 21. 如何在Laravel中列出論壇類別及其主題
- 22. Rails 3:如何將新主題與論壇相關聯
- 23. 如何在vBulletin論壇上使用c#創建新主題?
- 24. 如何從論壇主題獲取數據?
- 25. 如何在我的網站上製作基本論壇主題?
- 26. 如何在新帖子自動更新論壇主題?
- 27. D2L如何使用Rest API創建論壇主題?
- 28. 如何以編程方式創建論壇主題?
- 29. 閱讀論壇內容
- 30. 如何在sencha論壇發佈問題?
當然,困難的方法是記錄每個用戶對每個線程的每次訪問。 – 2010-01-04 03:54:12
我認爲大名字論壇與使用cookies有關,所以沒有一個龐大的數據庫記錄表和只爲這個功能進行讀/寫操作 – JasonDavis 2010-01-04 04:09:26
'如果我換了電腦和論壇,將會是一個龐大的PITA告訴我一切都是新的... – nickf 2010-01-04 05:46:50