掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
使用過(guò)Discuz的朋友都知道,哪怕你只是一個(gè)技術(shù)小白也好。DZ的DIY功能能讓一個(gè)完全不懂代碼的站長(zhǎng)也能進(jìn)行各種調(diào)用操作,比如在站內(nèi)可以直接在前臺(tái)調(diào)用數(shù)據(jù),而在站外可以直接用后臺(tái)提供的API進(jìn)行數(shù)據(jù)調(diào)用,比如在自己寫(xiě)的獨(dú)立程序上調(diào)用DZ論壇的數(shù)據(jù)就可以除了重新寫(xiě)SQL外還可以直接通過(guò)DZ后臺(tái)的API進(jìn)行調(diào)用。
但問(wèn)題來(lái)了。我們會(huì)發(fā)現(xiàn)有的帖子設(shè)置了閱讀權(quán)限,比如設(shè)置了10、100、255等等,這樣的帖子如果我們想DIY調(diào)用出來(lái)發(fā)現(xiàn)調(diào)用不到。其實(shí)這是DZ在程序設(shè)計(jì)上的考慮,他們是這樣考慮的,既然你設(shè)置了權(quán)限了也就是帖子不讓別人訪(fǎng)問(wèn)了,就沒(méi)必要在列表里面展示了,其實(shí)這樣的考慮比較完善的。但有的站長(zhǎng)就是有這樣的需求,比如設(shè)置了10的權(quán)限,我網(wǎng)站大多數(shù)用戶(hù)還是需要看啊。
帶著這樣的需求就開(kāi)始我們這里討論的話(huà)題吧。其實(shí)DIY調(diào)用數(shù)據(jù),或者直接在后臺(tái)進(jìn)行調(diào)用,最終還是需要從數(shù)據(jù)庫(kù)里邊取數(shù)據(jù)。只是DZ可能從架構(gòu)上采用了面向?qū)ο箝_(kāi)發(fā)機(jī)制,把這些都封裝到某些類(lèi)的方法里面。比如關(guān)于閱讀權(quán)限大于0就不顯示在DIY調(diào)用數(shù)據(jù)的列表里面,通過(guò)微構(gòu)網(wǎng)絡(luò)發(fā)現(xiàn)就是在source/class/block/forum/block_thread.php中的一個(gè)名為block_thread中所約束的,這個(gè)類(lèi)繼承了discuz_block 這個(gè)父類(lèi)。而且是寫(xiě)入在了getdata()這個(gè)方法里面。通過(guò)分析就在357行(X3.2版本)中有一段如下代碼
$sqlfrom WHERE {$maxwhere}t.readperm=’0′
其中WHERE {$maxwhere}t.readperm=’0′就是限制條件,也就是只有閱讀權(quán)限為0的帖子才會(huì)被顯示出來(lái),如果我們要把所有的都顯示出來(lái),那么還明顯我們可以改成WHERE {$maxwhere}t.readperm>=’0′都可以,當(dāng)然也可以是其他的方法了,比如修改其他的地方把這個(gè)where條件的一部分去掉。
到了這里我們很自然可以做進(jìn)一步的優(yōu)化,比如顯示閱讀權(quán)限為100及以下的帖子,那么我們只需要把那段代碼修改為
$sqlfrom WHERE {$maxwhere}t.readperm<=’100′
即可
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流