TT實作閱讀統計資訊-ViewCounter1.1插件實作

由於 TatterTools 的文章閱讀方式, 和一般的 blog 有些差距, 大多數的 blog 是將文章(或稱article)”繼續閱讀” (“more…”) 這種放在另一個文章頁面裡, 也就是說, 將文章區分為兩個部分, 好讓集合的頁面只顯示前面(一般使用summary, abstract, first part來描述), 而整篇的內容則是用 content, body, article 來描述, 如此一來就將文章區分為兩塊.

但在 TT 裡, 卻用另一種方式, 將文章整個用一個欄位來記錄, 而 more.. / less.. 則是利用了 tag 來進行切割, 如此一來, 便能快速地利用 dynamic html 進行文章的顯示及隱藏, 但缺點是內文無論使用者是否要看, 整個都會被使用者先下載至客戶端, 如此一來也沒辦法針對是否閱讀本文來進行記錄. 不過我們就先當只要下載了文章, 就有閱讀的方向來進行實作囉.

TT 在1.0.3版本後, 將顯示內容的部分, 利用了 “ViewPostContent” 及 “ViewNoticeContent” 的 event 來進行 plugin 的撰寫, 所以要拿到該事件可以容易地在這個部分進行操作. 以下為開始實作的步驟:

  1. 利用 plugin 中的 listener event 綁定至 ViewPostContent (文章) 及 ViewNoticeContent (公告), 並指定工作函數: CountAndShow
  2. 主角 index.php 內實作 CountAndShow 這個函數, 整個流程為
  • 先進行計數的更新
  • 若失敗則判定 mysql_errno 值是否為 1146, 也就是 table 不存在, 於是便建立對應 table, 此部分很重要, 通常新的 plugin 安裝後, 檢驗 table 是否存在不需要每次執行時作業, 而是先進行正常作業後, 發現不存在再進行 create table 的行為, 以降低判斷次數, 這是一個 plugin 撰寫的 pattern.
  • 若發現更新列數為 0 時, 代表還沒有任何一次閱讀本文, 於是就進行 insert 的操作
  • 最後將結果放在文章的最前面秀出即可

以上為整個 ViewCounter 0.9 版本的實作內容, 提供給各位參考及使用, 若有任何問題及困難, 歡迎不吝提出建議及指教, 謝謝!

以下為顯示的一個範例:

下載插件:
(0.9 版已更新為 0.95 版本, 請於後面下載)

 

資料庫工作 pattern 請參考:
http://jalbum.net/forum/thread.jspa?threadID=1908&start=15&tstart=0
另外還有一個 TraceWatch 插件也是我參考的資料, 請參閱:
http://offree.net/455
TT上也有類似的插件, 不過會產出大量的ajax code, 效果不是很好:
連結

[2006/10/15 23:05]
根據網友 Alvin 建議, 新增了 ViewCounterList tag handler 來顯示閱讀最多文章, 並更新插件版本為 0.95, 原來已安裝的就直接覆蓋即可, 並於 skin 上利用 [ ##_ViewCounterList_## ] (避免衝碼多加了空白), 即可將最多閱讀文章列表顯示出來.
下載插件:
(0.95 版已更新為 1.0 版本, 請於後面下載)

閱讀最多文章畫面如下:

[2006/10/18 0:30]
完成利用cookie方法將這次重覆訪問計數不增加, 避免過高且不正確的計數, 版本也更新至 1.0, 原使用者僅需覆蓋即可更新.
下載插件:
(1.0 版已更新為 1.05 版本, 請於後面下載)

[2006/11/8 0:06]
發現 {$database[‘prefix’]}Entries 表內的 category >= 0 才不是公告的資訊, 所以更新版本至 1.05, 原使用者僅需覆蓋即可更新.
下載插件:
(1.05 版已更新為 1.1 版本, 請於後面下載)

[2006/11/9 0:25]
網友通知bug修復完成, 將 {$database[‘prefix’]}Entries 表內的 visibility 由原來 = 2 改為 >=2 (因為公開是 2, 公開發佈為 3, 所以應該都要納入), 原使用者僅需覆蓋即可更新.
下載插件:
ViewCounter1.1.zip

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *