Discuz用戶分表後怎麽通過uid獲取用戶信息的(de)方法

2018-08-02 17:55 欄目: 技術學(xué)堂 查看()

在前段時間湖南紅(hóng)網有一(yī)個需求,大概計大現火就是調用用戶被置頂的(de)帖子(zǐ)數排名的(de)村紅我相top10,測試的(de)基本效果就是首先查詢到top10的(de)紙明看鄉uid集合(由于功能模塊原來的(de)的(de)數據結構中僅在置頂表中查詢得到ui資也機藍d的(de)信息),最終效果如(rú)下(由于測試網站隻有少部分數草術文師據,因此下面隻顯示5個):

 

得到uid之後還需要得到用戶相關的(de)幾個數據,包括頭像、個人主頁的(de)url以及用戶外男錯也名;頭像在discuz中可(kě)以使用avat上又師開ar方法獲取,個人主頁的(de)url通過uid直接拼裝即可(kě)。而用戶名則需要另外獲商器小在取,可(kě)能有人會說直接使用DB類的(de)fetch_first方法查詢comm刀物票草on_member表即可(kě)查到用戶對應做費新做的(de)用戶名。

但一(yī)開始就有個前提,那就是網站的(de)用戶分表了,比如(rú)一放術是金(yī)般分表後會産生兩個用戶表,分别是common_member和(hé)common_玩個廠女member_archive,所以光查詢前者肯定是不行的(de)。其實閱讀discu鐵樹但影z的(de)本身的(de)源代碼就可(kě)以發現,在很多地(dì)方讀員行海他的(de)做(zuò)法都是通過判斷用戶是否在com森生些頻mon_member中,如(rú)果存在窗能熱不則直接調用該值,否則需查詢common_member_archiv算錯唱門e。如(rú)下是discuz本身的(de)某個模塊的(de)源代碼:

 

這樣顯然是可(kě)行的(de),但是北坐音金通過C類發現并沒有通過uid來查username的(d看自空刀e),隻有通過username來查uid的(de),以上就是這樣的(de短裡訊湖)。如(rú)果要用這種思路則需要這麽來我車下朋寫:

 

然而,實際上有更加簡便的(de)方式的(de)

那就是通過uc來做(zuò)處理(lǐ),因為(wèi)要的(de)是用戶名等uc中也保存了服生暗暗的(de)信息,而且對于普通網站用戶而言uc中保存的(de)用戶信什上身綠息和(hé)dz中保存的(de)用戶信息是一(yī)緻的(de)。比如(rú)在di房影學劇scuz源代碼中可(kě)以看到如(rú)下這樣的(de)方法:

 

隻要熟悉discuz開發的(de)朋(péng)友都知道(dào),看命名就可(k信多音商ě)以顧名思義的(de),該方法是用于調取uc中的(de)用戶信息的(de)短服和她。我們可(kě)以在uc_client/client.php找到該方法:

 

然後可(kě)以在uc_client/control/音可用是user.php中找到該方法所調用的(de)睡土問劇方法:

 

也就是我們隻需要在一(yī)開始的(de)時候第二個參數傳入1即可(煙跳放術kě),也就是在該方法中會調用get_user_by_uid(),其中的(d對看樹長e)參數其實是uid。然後我們可(kě)以在uc_client/model/us北在木慢er.php找到該方法:

 

這樣就已經調取uc中的(de)用戶信息,需要注意問一化身的(de)是,在上一(yī)步的(de)on區業畫關get_user方法中返回的(de)時候并沒她數大銀有返回用戶的(de)所有信息,也不是返回帶有uid、username、ema藍可物樹il等這些鍵值的(de)數組。所以如(r年一能紙ú)果返回的(de)是$user,如(rú)果需要取username的(de)值物請靜制,不能夠寫成$user['username']的(de)。

至此,采用調用uc用戶的(de)方式通過discuz的(de)用戶ui煙喝這什d獲取的(de)了用戶的(de)用戶名。

掃二維碼與項目經理(lǐ)溝通

我們在微信上24小時期待你的(de)聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/電技就對互聯網交流

鄭重申明:某某網絡以外的(de)任何單位或個人,不得使用該坐訊裡生案例作為(wèi)工作成功展示!