Discuz用(yòng)戶分(fēn)表後←♥怎麽通(tōng)過uid獲取用(yòng)戶信息&α¥的(de)方法

2018-08-02 17:55 欄目: 技(jì)術(shù)學堂 查看(kàn)()

在前段時(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)top→£¶10的(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)avat↕∞ar方法獲取,個(gè)人(rén)主頁的(de)url通(tōng)過ui±∞✔φd直接拼裝即可(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)表了(l®→e),比如(rú)一(yī)般分(fēn)表後會(h$ε‌'uì)産生(shēng)兩個(gè)用(yòng)戶表,分(fēn)别是(≥≥shì)common_member和(h‍βλ€é)common_member_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ōn∑§g)過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ōn☆✘✔g)網站(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ě)以顧名思義的(d αe),該方法是(shì)用(yòng)于調取uc中的(de)用₹∞≈₽(yòng)戶信息的(de)。我們可(kě)以在uc_clα★φ∑ient/client.php找到(dàβπ✔o)該方法:

 

然後可(kě)以在uc_client/control/™¥ ↑user.php中找到(dào)該方法所調用(yòng)的(de)方法:

 

也(yě)就(jiù)是(shì)我們隻需要(yà¥♠o)在一(yī)開(kāi)始的(de)時(s✘♦ hí)候第二個(gè)參數(shù)傳入1即可(kě),也(yě)≠→ε♠就(jiù)是(shì)在該方法中會(huì)調用(yòng)ge★•t_user_by_uid(),其中的(de)參數(shù)其實是€↓(shì)uid。然後我們可(kě)以在uc_client/model/us↓σer.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、eπ× mail等這(zhè)些(xiē)鍵值的(de)數($$&shù)組。所以如(rú)果返回的(de)是(shì)$user↕≤α,如(rú)果需要(yào)取username的(de)值,不(bù)能(n←∞"éng)夠寫成$user['username']的(de)。

至此,采用(yòng)調用(yòng)uc用(yòng)戶的(d₩$•e)方式通(tōng)過discuz的(de)用(≤λyòng)戶uid獲取的(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ì)/互聯網交流

鄭重申明(míng):某某網絡以外(wà§>'i)的(de)任何單位或個(gè)人(rén),不(≥ ©₩bù)得(de)使用(yòng)該案例作(≤δ∞ zuò)為(wèi)工(gōng)作(zuò)成功展示!