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

發布于:2018-08-02 18:05:40

在前段時間湖南(nán)紅網有一(yī)個需求,大(dà)概就是調用用戶被置頂的帖子數排名的top10,測試的基本效果就是首先查詢到top10的uid集合(由于功能模塊原來的的數據結構中(zhōng)僅在置頂表中(zhōng)查詢得到uid的信息),最終效果如下(xià)(由于測試網站隻有少部分(fēn)數據,因此下(xià)面隻顯示5個):

 

得到uid之後還需要得到用戶相(xiàng)關的幾個數據,包括頭像、個人主頁的url以及用戶名;頭像在discuz中(zhōng)可以使用avatar方法獲取,個人主頁的url通過uid直接拼裝即可。而用戶名則需要另外(wài)獲取,可能有人會說直接使用DB類的fetch_first方法查詢common_member表即可查到用戶對應的用戶名。

但(dàn)一(yī)開(kāi)始就有個前提,那就是網站的用戶分(fēn)表了,比如一(yī)般分(fēn)表後會産生(shēng)兩個用戶表,分(fēn)别是common_member和common_member_archive,所以光查詢前者肯定是不行的。其實閱讀discuz的本身的源代碼就可以發現,在很多地方他的做法都是通過判斷用戶是否在common_member中(zhōng),如果存在則直接調用該值,否則需查詢common_member_archive。如下(xià)是discuz本身的某個模塊的源代碼:

 

這樣顯然是可行的,但(dàn)是通過C類發現并沒有通過uid來查username的,隻有通過username來查uid的,以上就是這樣的。如果要用這種思路則需要這麽來寫:

 

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

那就是通過uc來做處理,因爲要的是用戶名等uc中(zhōng)也保存了的信息,而且對于普通網站用戶而言uc中(zhōng)保存的用戶信息和dz中(zhōng)保存的用戶信息是一(yī)緻的。比如在discuz源代碼中(zhōng)可以看到如下(xià)這樣的方法:

 

隻要熟悉discuz開(kāi)發的朋友(yǒu)都知(zhī)道,看命名就可以顧名思義的,該方法是用于調取uc中(zhōng)的用戶信息的。我們可以在uc_client/client.php找到該方法:

 

然後可以在uc_client/control/user.php中(zhōng)找到該方法所調用的方法:

 

也就是我們隻需要在一(yī)開(kāi)始的時候第二個參數傳入1即可,也就是在該方法中(zhōng)會調用get_user_by_uid(),其中(zhōng)的參數其實是uid。然後我們可以在uc_client/model/user.php找到該方法:

 

這樣就已經調取uc中(zhōng)的用戶信息,需要注意的是,在上一(yī)步的onget_user方法中(zhōng)返回的時候并沒有返回用戶的所有信息,也不是返回帶有uid、username、email等這些鍵值的數組。所以如果返回的是$user,如果需要取username的值,不能夠寫成$user['username']的。

至此,采用調用uc用戶的方式通過discuz的用戶uid獲取的了用戶的用戶名。

本文部分(fēn)内容收集整理自(zì)網絡,僅供分(fēn)享和交流,版權歸原作者所有,如涉及您的版權,請與我們聯系,我們将在第一(yī)時間删除。


上一(yī)篇:微信支付官方緊急推送關于修複XXE漏洞提示,附

下(xià)一(yī)篇:krpano上傳多張大(dà)圖時切圖過程無響應分(fēn)析

資訊 觀察行業視覺,用專業的角度,講出你們的心聲。
MORE

I NEED TO BUILD WEBSITE

我需要建站

*請認真填寫需求信息,我們會在24小(xiǎo)時内與您取得聯系。