首頁  >  文章  >  CMS教程  >  Discuz主題瀏覽量實現原理與不更新的解決方案

Discuz主題瀏覽量實現原理與不更新的解決方案

咔咔
咔咔原創
2020-04-30 15:23:042370瀏覽

本文主要內容:

解決Discuz主題瀏覽量不發生變化或跟這回复帖子的數量一起變化

#如果你是新手discuz開發人員可以從頭查看文章

如果你是一個站長直接看文章底部總結即可

更多文章盡在專欄:Discuz專欄

問題還原

這這頁面為主題頁

上面紅框為主題的瀏覽量使用的是$_G[forum_thread][views]

以下全部回復為回帖數量使用的是$_G[forum_thread][replies]

然而我們刷新頁面時瀏覽量並不會增加,但是我們在主題回復一個帖子時瀏覽量就會增加

Discuz主題瀏覽量實現原理與不更新的解決方案

那我們在測試一下,新增一個回帖,會發現確實如此哈!但問題沒那麼簡單,請繼續看下文

Discuz主題瀏覽量實現原理與不更新的解決方案

#排查步驟

  • 第一步:我們需要確認瀏覽量跟回帖量是不是這兩個字段

  • 第二步:我們需要追溯瀏覽量增加的原理

那麼下來咱們來排查第一個問題:打開資料庫字典查看pre_forum_thread 表,那麼我們就確定了我們在原始碼裡使用的變數是正確的

Discuz主題瀏覽量實現原理與不更新的解決方案

##追溯瀏覽量實現的原理

在程式碼的

986行,我們就解決了我們的第一個問題,那就是為什麼瀏覽量跟回帖量的資料是一樣的,這是因為在這裡做了一個判斷。如果回覆貼的數量大於主題瀏覽量時,會讓瀏覽量跟回帖量相等

Discuz主題瀏覽量實現原理與不更新的解決方案

#然後繼續找更新主題瀏覽量的程式碼:在

1054行裡有viewthread_updateviews這個方法,根據字面意思我們都能理解這個方法是乾嘛的,主題更新瀏覽量的。

這段程式碼執行的步驟

  • 先回判斷後台是否開啟了最佳化主題瀏覽量優化功能

  • #接著判斷全域變數裡邊

    addviews這個的值

  • #如果這個值小於100就會把資料更新到

    pre_forum_threadaddviews這個表格

  • 如果當

    addviews這個值大於100時就會清空此專題的瀏覽量,然後會把這個資料存到pre_forum_thread 主題表的views欄位

  • 這就是基本的實作流程

  • 在上述中,我們發現了瀏覽量是不會直接存入主題表的,這樣做的好處就是防止頻繁更新主題表,防止鎖表

Discuz主題瀏覽量實現原理與不更新的解決方案

總結

到了這裡我想該明白的也都明白了,關於主題瀏覽量不增加的原因其實都是後台控制的,因為在上段程式碼中的第一行就可以看到這個

preventrefresh值是控制是否開啟優化主題瀏覽量的

只要根據咔咔這樣配置就可以了。

但是身為開發者來說對一個功能點的實作必須追溯源碼,只有這樣才可以不斷提升自己。

Discuz主題瀏覽量實現原理與不更新的解決方案

以上是Discuz主題瀏覽量實現原理與不更新的解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn