Discuz如何開發關注功能

本文實現功能:

1.關注和取消關注用戶

2. 判斷與用戶之間的關注關係

實現效果

點擊關注後顯示已關注,取消關注後顯示關注ta

image.png

image.png

實現方案

用戶空間的入口是home.php文件,所以我們需要先從home.php這個文件入手

打開文件home.php文件的29行可以看到使用in_array進行了一次判斷,主要注重space和spacecp這倆個模塊

我們先認識倆個單詞:space(空間) 和 spacecp(翻譯過來是太空計劃)

image.png

然後我們需要打開discuz原來的默認模板(這個是你自己在搭建一個discuz應用,沒有任何改動的代碼),然後發一個主題,隨便點擊一個用戶圖像,查看地址欄的地址信息。

發現進入的是space這個模塊

image.png

那麼根據地址欄我們可以找到source/include/space/space_profile.php這個文件。但是在這個文件裏邊,找不到任何有關於關注的代碼。

但是這個文件裏邊包含了關於用戶空間的所有需要的數據。比如用戶粉絲量,用戶主題數量、用戶關注的數量、用戶好友數量。這些值都保存在$space這個變量中,直接在模板裏邊使用接口。關於這些字段可以在數據庫字典裏邊直接搜索關鍵字即可

於是我們在看一下spacecp這個模塊,在這個目錄下, 我們發現了follow這個文件。follow的英文翻譯過來就有關注的含義。

在學習別人項目時,我們第一需要看文檔,第二是需要自己根據目錄結構和文件名來猜想其含義

image.png

打開文件source/include/spacecp/spacecp_follow.php。在文件一開頭就有倆個數值,一個add一個del。然後是使用的op這個變量接收的。根據這個op變量就可以知道添加關注是add 取消關注時del方法

image.png

我們在add裏邊發現一個值follow_not_follow_self這個我的理解是自己不能關注自己。可以在language裏邊進行搜索這個值去進行確認。在這裏就已經證明了source/include/spacecp/spacecp_follow.php就是實現關注的文件

image.png

接下來就是怎麼進行請求呢!

根據下面箭頭指向的四個$_GET值 我們能確定的請求地址爲home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid={$space[uid]}&mobile=2

至於爲什麼能確定請求地址,後文在介紹,本文重點是關注功能

image.png

然後我們在模板裏邊寫上以下代碼,就是關注ta的那個樣式

<a href="home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid={$space[uid]}&mobile=2

" class="dialog fz12 follow">關注ta

         </a>

image.png

點擊關注,這個時候我們關注就已經做好了。那麼取消關注也是同理了哈!

image.png

接下來我們根據關鍵字follow在數據庫字典裏邊搜索,發現會有一個用戶關注關係表

image.png

打開數據庫查到pre_home_follow 這個表,就會發現有一條數據就是關注者跟被關注者。

image.png

在上文中我們實現了關注與取消關注,但是當我們關注了用戶後,是不是需要顯示已關注 或者 關注ta的字樣

處理是否顯示關注

我們打開數據庫字典搜索pre_common_member_count 用戶統計表。

在這個表裏邊我們發現有收聽數量和聽衆數量。那麼對應的就是關注數量和粉絲數量

image.png

然後打開文件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模板裏邊進行判斷

<div class="porfile_card_follow cl">

         <!--{if isset($space[is_follow]) && $space[is_follow] == 0}-->

         <a href="home.php?mod=spacecp&ac=follow&op=del&fuid={$space[uid]}&mobile=2

" class="dialog fz12 follow">已關注

         </a>

         <!--{else}-->

         <a href="home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid={$space[uid]}&mobile=2

" class="dialog fz12 follow">關注ta

         </a>

         <!--{/if}-->

      </div>

測試

沒有關注時顯示關注ta

image.png

關注之後顯示以關注

image.png

總結

關於本文的實現關注功能。在網上的資料不是很多,但是我們也可以自己去研究實現。後期會一直推送discuz的文章。有任何問題,評論區見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章