掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
大家都知道小米論壇也是基于Discuz的開(kāi)發(fā)的,只不過(guò)他們進(jìn)行了深度二次開(kāi)發(fā),以至于看上去沒(méi)有了Discuz的一些特征。也許是小米這個(gè)品牌火的原因,很多人就開(kāi)始模仿小米的風(fēng)格,特別是主題列表;總之現(xiàn)在不管是OPPO、360論壇這些比較知名的社區(qū),還是一些小的論壇,大家都似乎想把列表改成小米那種風(fēng)格。不過(guò)我個(gè)人也覺(jué)得小米的那種風(fēng)格比Dz默認(rèn)的要好看很多。
但大家也知道,Discuz的主題列表是使用table來(lái)控制布局了,我可以這么說(shuō),現(xiàn)在的很多前端工程師都特別討厭這種布局,大家可以看到那些大的論壇自己進(jìn)行二次開(kāi)發(fā)的時(shí)候已經(jīng)把table給移除掉了。也是因?yàn)閠able的存在導(dǎo)致我們進(jìn)行二次開(kāi)發(fā)時(shí)候可能會(huì)出現(xiàn)一些問(wèn)題。
雖然Dsicuz使用了模版分離,但是在一些頁(yè)面模版還是在做很多邏輯性的東西,比如主題列表中的一個(gè)小圖標(biāo),可能就會(huì)在模版中出現(xiàn)幾十行的代碼,這樣就給我們的修改帶來(lái)很大的麻煩(因?yàn)榭吹枚紩灒?。但是即使你在forumdisplay_list.htm中把一切都修改成你所想要的,比如把原來(lái)的五列修改成兩列,或者干錯(cuò)用div代替table來(lái)控制布局,但是你會(huì)發(fā)現(xiàn)還是有問(wèn)題(這個(gè)問(wèn)題實(shí)際上很多現(xiàn)在在應(yīng)用中心的第三方同類模版是存在的)。
比如說(shuō)Discuz有一個(gè)這樣的功能,當(dāng)我們打開(kāi)某個(gè)板塊,然后這個(gè)板塊有新的回復(fù);頁(yè)面會(huì)自動(dòng)顯示“該板塊有新回復(fù)”,然后我們點(diǎn)擊會(huì)發(fā)現(xiàn)可以加載新的內(nèi)容到最開(kāi)頭。而就是這樣的場(chǎng)景,就會(huì)出問(wèn)題;因?yàn)檫@是通過(guò)ajax來(lái)請(qǐng)求的,因此這些新內(nèi)容并沒(méi)有在這個(gè)模版文件中,而是在其他位置。這樣就導(dǎo)致了如圖(下面是依然修改成table來(lái)控制布局,但改成了兩列的)。
因此不管是保持table來(lái)控制布局,還是用div來(lái)替換table,我們都得找到那些通過(guò)ajax請(qǐng)求加載過(guò)來(lái)的數(shù)據(jù)的模版,比如剛才所說(shuō)的就位于forum/ajax_threadlist.htm。其中如下代碼正是相應(yīng)的模版文件:
newthread[{$i}] = {'tid':$thread[tid], 'thread': {'icn':{'className':'icn','val':'$icon'}<!--{if $_G['forum']['ismoderator']}-->, 'o':{'className':'o','val':'<input type="checkbox" value="{$thread[tid]}" name="moderate[]" onclick="tmodclick(this)">'}<!--{/if}--> ,'common':{'className':'new fn','val':'{if !$_G['setting']['forumdisplaythreadpreview']}<a class="tdpre y" href="javascript:void(0);" onclick="javascript:previewThread(\'$thread[tid]\', \'$thread[id]\');">{lang preview}</a>{/if}$thread[threadurl]'}, 'author':{'className':'by','val':'<cite>$thread[authorurl]</cite><em><span>{$thread[dateline]}</span></em>'}, 'num':{'className':'num','val':'<a href="forum.php?mod=viewthread&tid={$thread[tid]}">{$thread[replies]}</a><em>{$thread[views]}</em>'}, 'lastpost':{'className':'by','val':'<cite>$thread[lastposterurl]</cite><em><a href="forum.php?mod=redirect&tid=$thread[tid]&goto=lastpost#lastpost">{$thread[lastpost]}</a></em>'}}};
比如我改成與我修改forumdisplay_list.htm的一致的,就是如下代碼;當(dāng)然我還是建議如果要修改這部分,就干脆修改成了div來(lái)控制布局(因?yàn)槲也⒉幌矚g用table來(lái)控制布局)。
newthread[{$i}] = {'tid':$thread[tid], 'thread': {'icn':{'className':'icn','val':'<a href="home.php?mod=space&uid=$thread[authorid]" c="1" ><!--{avatar($thread[authorid],small)}--></a> '},'common':{'className':'new fn','val':'<p><!--{if $_G["forum"]["ismoderator"]}--><input type="checkbox" value="{$thread[tid]}" name="moderate[]" onclick="tmodclick(this)"><!--{/if}-->$thread[threadurl]</p><div class="tinfo cl"><span class="z"><i>{lang author} </i>$thread[authorurl]<i{if $thread["istoday"]} class="xi1"{/if}>{$thread[dateline]}</i><span class="pipe">/</span><i>{lang lastpost} </i><i><a href="forum.php?mod=redirect&tid=$thread[tid]&goto=lastpost#lastpost">{$thread[lastpost]}</a></i> </span><span class="y"><em class="ico_reply">{$thread[replies]}</em><em class="ico_see">{$thread[views]}</em></span></div>'}}};
這樣就完成了這一部分的問(wèn)題,實(shí)際上Discuz很多地方都是通過(guò)ajax來(lái)請(qǐng)求數(shù)據(jù),而且請(qǐng)求過(guò)來(lái)的數(shù)據(jù)是已經(jīng)帶了模版的,如果請(qǐng)求過(guò)來(lái)的與本身的布局不一致就會(huì)造成問(wèn)題,這一點(diǎn)要特別注意。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流