Discuz用(yòng)戶分(fēn)表後怎麽通(tōng)過uid獲取用(yòng)戶信息的(de)方法
在前段時(shí)間(jiān)湖(hú)南(nán)紅(hóng)網有(yǒu)一(yī)個(gè)需求,大(dà)概就(jiù)是(shì)調用(y&òng)用(yòng)戶被置頂的(de)帖子(zǐ)數(shù)排名的(de)top10,測試的(de)基本效果就(jiù)是(shì)首先查詢到(dào)top10的(de)≥uid集合(由于功能(néng)模塊原來(lái)的(de)的(de)數(shù)據結構中僅在置頂表中查詢得(de)到(dΩào)uid的(de)信息),最終效果如(rú)下(xià)(由于測試網站(zhàn)隻有(yǒu)少(shǎo)部分(♥fēn)數(shù)據,因此下(xià)面隻顯示5個(gè)):
得(de)到(dào)uid之後還(hái)需要(yào)得(de)到(dào)用(yòng)戶相(xiàng)關的(de)幾個(gè)數(shù)據,包括頭像、個(gφè)人(rén)主頁的(de)url以及用(yòng)戶名;頭像在discuz中可(kě)以使用(yòng)avatar方法獲取,個(gè)人(rén)主頁的(de)url通(tōng)過uid直接拼裝即可(kě)。而用(yòng)戶名則需要(yào)另外(wài)獲取,可(kě)能(néng)有(yǒu)'人(rén)會(huì)說(shuō)直接使用(yòng)DB類的(de)fetch_first方法查詢common_member表即可>(kě)查到(dào)用(yòng)戶對(duì)應的(de)用(yòng)戶名。
但(dàn)一(yī)開(kāi)始就(jiù)有(yǒu)個(gè)前提,那(nà)就(jiù)是(shì)網站(zhàn)的(de)用(yòng)戶分(fēn)表了(le),比α如(rú)一(yī)般分(fēn)表後會(huì)産生(shēng)兩個(gè)用(yòng)戶表,分(fēn)别是(shì)common_member和(hé)common_membγer_archive,所以光(guāng)查詢前者肯定是(shì)不(bù)行(xíng)的(de)。其實閱讀(dú)discuz的(de)δ本身(shēn)的(de)源代碼就(jiù)可(kě)以發現(xiàn),在很(hěn)多(duō)地(dì)方他(tā)的(de)做(zuò)法都(dōu)是(sh✔ì)通(tōng)過判斷用(yòng)戶是(shì)否在common_member中,如(rú)果存在則直接調用(yεòng)該值,否則需查詢common_member_archive。如(rú)下(xià)是(shì)discuz本身(shēn)的(de)某個(gè)模塊的(de)源代碼:
這(zhè)樣顯然是(shì)可(kě)行(xíng)的(de),但(dàn)是(shì)通(tōng)過C類發現(xiàn)并沒有(yǒu)通(tōng)過uid來(lái)查username的←(de),隻有(yǒu)通(tōng)過username來(lái)查uid的(de),以上(shàng)就(jiù)是(shì)這(zhè•)樣的(de)。如(rú)果要(yào)用(yòng)這(zhè)種思路(lù)則需要(yào)這(zhè)麽來(lái)寫:
然而,實際上(shàng)有(yǒu)更加簡便的(de)方式的(de)
那(nà)就(jiù)是(shì)通(tōng)過uc來(lái)做(zuò)處理(lǐ),因為(wèi)€要(yào)的(de)是(shì)用(yòng)戶名等uc中也(yě)保存了(le)的(de)信息,而且對(duì)于普通(tōng)網站(zhàn)用(yò×ng)戶而言uc中保存的(de)用(yòng)戶信息和(hé)dz中保存的(de)用(yòng)戶信息是(shì)一(yī)緻的(de)。比如(rú)在discuz源代碼£中可(kě)以看(kàn)到(dào)如(rú)下(xià)這(zhè)樣的(de)方法:
隻要(yào)熟悉discuz開(kāi)發的(de)朋(péng)友(yǒu)都(dōu)知(zhī)道(dào),看(kàn)命名就(★jiù)可(kě)以顧名思義的(de),該方法是(shì)用(yòng)于調取uc中的(de)用(yòng)戶信息的(de)。我們可(kě)以在uc_client/clieπnt.php找到(dào)該方法:
然後可(kě)以在uc_client/control/user.php中找到(dào)該方法所調用(yòng)的(de)方法:
也(yě)就(jiù)是(shì)我們隻需要(yào)在一(yī)開(kāi)始的(de)時(shí)候第二個(gè)參數(shù)傳入1即可(kě),也(yě)就(ji↕ù)是(shì)在該方法中會(huì)調用(yòng)get_user_by_uid(),其中的(de)參數(shù)其實是(£shì)uid。然後我們可(kě)以在uc_client/model/user.php找到(dào)該方法:
這(zhè)樣就(jiù)已經調取uc中的(de)用(yòng)戶信息,需要(yào)注意的(de)是(shì),在上(shàng)一(yī)步的(de)onget_user方法中返回的(de)"時(shí)候并沒有(yǒu)返回用(yòng)戶的(de)所有(yǒu)信息,也(yě)不(bù)是(shì)返回帶有₹(yǒu)uid、username、email等這(zhè)些(xiē)鍵值的(de)數(shù)組。所以如(rú)果返回的(de)是(shì)$useαr,如(rú)果需要(yào)取username的(de)值,不(bù)能(néng)夠寫成$user['user×name']的(de)。
至此,采用(yòng)調用(yòng)uc用(yòng)戶的(de)方式通(tōng)過discuz的(de)用(yòng)戶ui₽d獲取的(de)了(le)用(yòng)戶的(de)用(yòng)戶名。

掃二維碼與項目經理(lǐ)溝通(tōng)
我們在微(wēi)信上(shàng)24小(xiǎo)時(shí)期待你(nǐ)的(de)聲音(yīn )
解答(dá)本文(wén)疑問(wèn)/技(jì)術(shù)咨詢/運營咨詢/技(jì)術(shù)建議(yì£)/互聯網交流