本文實現功能:
1.關注和取消關注用戶
2. 判斷與用戶之間的關注關係
點擊關注後顯示已關注,取消關注後顯示關注ta
使用者空間的入口是home.php文件,所以我們需要先從home.php這個檔案入手
開啟檔案home.php檔案的29行可以看到使用in_array進行了一次判斷,主要注重space和spacecp這兩個模組
我們先認識兩個單字:space(空間) 和spacecp(翻譯過來是太空計畫)
#然後我們需要打開discuz原來的預設模板(這個是你自己在搭建一個discuz應用,沒有任何改動的程式碼),然後發一個主題,隨便點擊一個用戶圖像,查看網址列的地址資訊。
發現進入的是space這個模組
那麼根據網址列我們可以找到source/include/space/space_profile.php這個文件。但是在這個文件裡邊,找不到任何關於關注的程式碼。
但是這個檔案裡邊包含了關於使用者空間的所有需要的資料。例如用戶粉絲量,用戶主題數、用戶關注的數量、用戶好友數。這些值都保存在$space這個變數中,直接在模板裡邊使用介面。關於這些欄位可以在資料庫字典裡邊直接搜尋關鍵字即可
於是我們在看一下spacecp這個模組,在這個目錄下, 我們發現了follow這個檔案。 follow的英文翻譯過來就有關注的意思。
在學習別人專案時,我們第一需要看文檔,第二是需要自己根據目錄結構和文件名稱來猜想其含義
打開檔案source/include/spacecp/spacecp_follow.php。在檔案一開頭就有兩個數值,一個add一個del。然後是使用的op這個變數接收的。根據這個op變數就可以知道加入關注是add 取消關注時del方法
我們在add裡邊發現一個值follow_not_follow_self這個我的理解是自己不能關注自己。可以在language裡邊進行搜尋這個值去進行確認。這裡就已經證明了source/include/spacecp/spacecp_follow.php就是實作關注的檔案
接下來就是怎麼進行請求呢!
根據下面箭頭所指向的四個$_GET值 我們能確定的請求位址為
home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid={$space[uid]}&mobile=2
至於為何能確定請求位址,後文在介紹,本文重點是關注功能
然後我們在模板裡邊寫上以下程式碼,就是關注ta的那個樣式
关注ta
點擊關注,這個時候我們關注就已經做好了。那麼取消追蹤也是同理了哈!
接下來我們根據關鍵字follow在資料庫字典裡邊搜索,發現會有一個使用者關注關係表
打开数据库查到pre_home_follow 这个表,就会发现有一条数据就是关注者跟被关注者。
在上文中我们实现了关注与取消关注,但是当我们关注了用户后,是不是需要显示已关注 或者 关注ta的字样
我们打开数据库字典搜索pre_common_member_count 用户统计表。
在这个表里边我们发现有收听数量和听众数量。那么对应的就是关注数量和粉丝数量
然后打开文件source/include/space/space_profile.php加上代码
# 判断是否关注 $follow_data = DB::fetch_all("select * from pre_home_follow where uid = '$_G[uid]' and followuid = '$space[uid]' limit 1"); if(!empty($follow_data)){ $space['is_follow'] = $follow_data[0]['mutual']; }
在template/default/touch/home/space_profile.htm模板里边进行判断
没有关注时显示关注ta
关注之后显示以关注
关于本文的实现关注功能。在网上的资料不是很多,但是我们也可以自己去研究实现。后期会一直推送discuz的文章。有任何问题,评论区见。
以上是discuz如何開發關注功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!