掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流
在前段時間湖南紅網有一個需求,大概就是調用用戶被置頂的帖子數排名的top10,測試的基本效果就是首先查詢到top10的uid集合(由于功能模塊原來的的數據結構中僅在置頂表中查詢得到uid的信息),最終效果如下(由于測試網站只有少部分數據,因此下面只顯示5個):
得到uid之后還需要得到用戶相關的幾個數據,包括頭像、個人主頁的url以及用戶名;頭像在discuz中可以使用avatar方法獲取,個人主頁的url通過uid直接拼裝即可。而用戶名則需要另外獲取,可能有人會說直接使用DB類的fetch_first方法查詢common_member表即可查到用戶對應的用戶名。
但一開始就有個前提,那就是網站的用戶分表了,比如一般分表后會產生兩個用戶表,分別是common_member和common_member_archive,所以光查詢前者肯定是不行的。其實閱讀discuz的本身的源代碼就可以發(fā)現(xiàn),在很多地方他的做法都是通過判斷用戶是否在common_member中,如果存在則直接調用該值,否則需查詢common_member_archive。如下是discuz本身的某個模塊的源代碼:
這樣顯然是可行的,但是通過C類發(fā)現(xiàn)并沒有通過uid來查username的,只有通過username來查uid的,以上就是這樣的。如果要用這種思路則需要這么來寫:
然而,實際上有更加簡便的方式的
那就是通過uc來做處理,因為要的是用戶名等uc中也保存了的信息,而且對于普通網站用戶而言uc中保存的用戶信息和dz中保存的用戶信息是一致的。比如在discuz源代碼中可以看到如下這樣的方法:
只要熟悉discuz開發(fā)的朋友都知道,看命名就可以顧名思義的,該方法是用于調取uc中的用戶信息的。我們可以在uc_client/client.php找到該方法:
然后可以在uc_client/control/user.php中找到該方法所調用的方法:
也就是我們只需要在一開始的時候第二個參數傳入1即可,也就是在該方法中會調用get_user_by_uid(),其中的參數其實是uid。然后我們可以在uc_client/model/user.php找到該方法:
這樣就已經調取uc中的用戶信息,需要注意的是,在上一步的onget_user方法中返回的時候并沒有返回用戶的所有信息,也不是返回帶有uid、username、email等這些鍵值的數組。所以如果返回的是$user,如果需要取username的值,不能夠寫成$user['username']的。
至此,采用調用uc用戶的方式通過discuz的用戶uid獲取的了用戶的用戶名。
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流