本文實(shí)現(xiàn)功能:????????1.關(guān)注和取消關(guān)注用戶(hù)????????2. 判斷與用戶(hù)之間的關(guān)注關(guān)系
實(shí)現(xiàn)效果
點(diǎn)擊關(guān)注后顯示已關(guān)注,取消關(guān)注后顯示關(guān)注ta
實(shí)現(xiàn)方案
用戶(hù)空間的入口是home.php文件,所以我們需要先從home.php這個(gè)文件入手
打開(kāi)文件home.php文件的29行可以看到使用in_array進(jìn)行了一次判斷,主要注重space和spacecp這倆個(gè)模塊
我們先認(rèn)識(shí)倆個(gè)單詞:space(空間) 和 spacecp(翻譯過(guò)來(lái)是太空計(jì)劃)?
然后我們需要打開(kāi)discuz原來(lái)的默認(rèn)模板(這個(gè)是你自己在搭建一個(gè)discuz應(yīng)用,沒(méi)有任何改動(dòng)的代碼),然后發(fā)一個(gè)主題,隨便點(diǎn)擊一個(gè)用戶(hù)圖像,查看地址欄的地址信息。
發(fā)現(xiàn)進(jìn)入的是space這個(gè)模塊
那么根據(jù)地址欄我們可以找到source/include/space/space_profile.php這個(gè)文件。但是在這個(gè)文件里邊,找不到任何有關(guān)于關(guān)注的代碼。
但是這個(gè)文件里邊包含了關(guān)于用戶(hù)空間的所有需要的數(shù)據(jù)。比如用戶(hù)粉絲量,用戶(hù)主題數(shù)量、用戶(hù)關(guān)注的數(shù)量、用戶(hù)好友數(shù)量。這些值都保存在$space這個(gè)變量中,直接在模板里邊使用接口。關(guān)于這些字段可以在數(shù)據(jù)庫(kù)字典里邊直接搜索關(guān)鍵字即可
于是我們?cè)诳匆幌?span style="color: rgb(255, 0, 0);">spacecp這個(gè)模塊,在這個(gè)目錄下, 我們發(fā)現(xiàn)了follow這個(gè)文件。follow的英文翻譯過(guò)來(lái)就有關(guān)注的含義。
在學(xué)習(xí)別人項(xiàng)目時(shí),我們第一需要看文檔,第二是需要自己根據(jù)目錄結(jié)構(gòu)和文件名來(lái)猜想其含義
打開(kāi)文件source/include/spacecp/spacecp_follow.php。在文件一開(kāi)頭就有倆個(gè)數(shù)值,一個(gè)add一個(gè)del。然后是使用的op這個(gè)變量接收的。根據(jù)這個(gè)op變量就可以知道添加關(guān)注是add? 取消關(guān)注時(shí)del方法
我們?cè)?span style="color: rgb(255, 0, 0);">add里邊發(fā)現(xiàn)一個(gè)值follow_not_follow_self這個(gè)我的理解是自己不能關(guān)注自己。可以在language里邊進(jìn)行搜索這個(gè)值去進(jìn)行確認(rèn)。在這里就已經(jīng)證明了source/include/spacecp/spacecp_follow.php就是實(shí)現(xiàn)關(guān)注的文件
接下來(lái)就是怎么進(jìn)行請(qǐng)求呢!
根據(jù)下面箭頭指向的四個(gè)$_GET值? 我們能確定的請(qǐng)求地址為
home.php?mod=spacecp&ac=follow&op=add&hash={FORMHASH}&fuid={$space[uid]}&mobile=2
至于為什么能確定請(qǐng)求地址,后文在介紹,本文重點(diǎn)是關(guān)注功能
然后我們?cè)谀0謇镞厡?xiě)上以下代碼,就是關(guān)注ta的那個(gè)樣式
??????????<a>關(guān)注ta ?????????</a>
點(diǎn)擊關(guān)注,這個(gè)時(shí)候我們關(guān)注就已經(jīng)做好了。那么取消關(guān)注也是同理了哈!
接下來(lái)我們根據(jù)關(guān)鍵字follow在數(shù)據(jù)庫(kù)字典里邊搜索,發(fā)現(xiàn)會(huì)有一個(gè)用戶(hù)關(guān)注關(guān)系表
打開(kāi)數(shù)據(jù)庫(kù)查到pre_home_follow?這個(gè)表,就會(huì)發(fā)現(xiàn)有一條數(shù)據(jù)就是關(guān)注者跟被關(guān)注者。
在上文中我們實(shí)現(xiàn)了關(guān)注與取消關(guān)注,但是當(dāng)我們關(guān)注了用戶(hù)后,是不是需要顯示已關(guān)注? 或者 關(guān)注ta的字樣
處理是否顯示關(guān)注
我們打開(kāi)數(shù)據(jù)庫(kù)字典搜索pre_common_member_count 用戶(hù)統(tǒng)計(jì)表。
在這個(gè)表里邊我們發(fā)現(xiàn)有收聽(tīng)數(shù)量和聽(tīng)眾數(shù)量。那么對(duì)應(yīng)的就是關(guān)注數(shù)量和粉絲數(shù)量
然后打開(kāi)文件source/include/space/space_profile.php加上代碼
#?判斷是否關(guān)注 $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模板里邊進(jìn)行判斷
<div> ?????????<!--{if isset($space[is_follow]) && $space[is_follow] == 0}--> ?????????<a>已關(guān)注 ?????????</a> ?????????<!--{else}--> ?????????<a>關(guān)注ta ?????????</a> ?????????<!--{/if}--> ??????</div>
測(cè)試
沒(méi)有關(guān)注時(shí)顯示關(guān)注ta
關(guān)注之后顯示以關(guān)注
總結(jié)
關(guān)于本文的實(shí)現(xiàn)關(guān)注功能。在網(wǎng)上的資料不是很多,但是我們也可以自己去研究實(shí)現(xiàn)。后期會(huì)一直推送discuz的文章。有任何問(wèn)題,評(píng)論區(qū)見(jiàn)。