掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
大家都知道小米論壇也是基于Discuz的開發(fā)的,只不過他們進行了深度二次開發(fā),以至于看上去沒有了Discuz的一些特征。也許是小米這個品牌火的原因,很多人就開始模仿小米的風格,特別是主題列表;總之現(xiàn)在不管是OPPO、360論壇這些比較知名的社區(qū),還是一些小的論壇,大家都似乎想把列表改成小米那種風格。不過我個人也覺得小米的那種風格比Dz默認的要好看很多。
但大家也知道,Discuz的主題列表是使用table來控制布局了,我可以這么說,現(xiàn)在的很多前端工程師都特別討厭這種布局,大家可以看到那些大的論壇自己進行二次開發(fā)的時候已經(jīng)把table給移除掉了。也是因為table的存在導(dǎo)致我們進行二次開發(fā)時候可能會出現(xiàn)一些問題。
雖然Dsicuz使用了模版分離,但是在一些頁面模版還是在做很多邏輯性的東西,比如主題列表中的一個小圖標,可能就會在模版中出現(xiàn)幾十行的代碼,這樣就給我們的修改帶來很大的麻煩(因為看得都暈)。但是即使你在forumdisplay_list.htm中把一切都修改成你所想要的,比如把原來的五列修改成兩列,或者干錯用div代替table來控制布局,但是你會發(fā)現(xiàn)還是有問題(這個問題實際上很多現(xiàn)在在應(yīng)用中心的第三方同類模版是存在的)。
比如說Discuz有一個這樣的功能,當我們打開某個板塊,然后這個板塊有新的回復(fù);頁面會自動顯示“該板塊有新回復(fù)”,然后我們點擊會發(fā)現(xiàn)可以加載新的內(nèi)容到最開頭。而就是這樣的場景,就會出問題;因為這是通過ajax來請求的,因此這些新內(nèi)容并沒有在這個模版文件中,而是在其他位置。這樣就導(dǎo)致了如圖(下面是依然修改成table來控制布局,但改成了兩列的)。
因此不管是保持table來控制布局,還是用div來替換table,我們都得找到那些通過ajax請求加載過來的數(shù)據(jù)的模版,比如剛才所說的就位于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的一致的,就是如下代碼;當然我還是建議如果要修改這部分,就干脆修改成了div來控制布局(因為我并不喜歡用table來控制布局)。
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>'}}};
這樣就完成了這一部分的問題,實際上Discuz很多地方都是通過ajax來請求數(shù)據(jù),而且請求過來的數(shù)據(jù)是已經(jīng)帶了模版的,如果請求過來的與本身的布局不一致就會造成問題,這一點要特別注意。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流