在中國互聯網中,也許從業者無人不知道 Disucz 的大名,因為它確實一款非常優秀的開源建站軟件,也因此運行在國內各個網站服務器之上。説到它大家可能最大的印象就是做社區論壇,其實從本質上講這塊產品包括了很多模塊,而我們最常用的 BBS 只是其中的一部分而已,同樣的道理,門户也是其中的模塊之一。

也許在國內也有過很多優秀的開源 CMS 建站系統,但就是因為 DZ 聚合了很多個模塊,而且進行各個模塊的相互整合技術成本會很低,因此有不少的站長想直接利用這個程序解決自己所有問題,即全部用這套程序搭建問題。但就在這個時候,大家可能都有所感受,其實 DZ 的精髓還是在於它的論壇部分,而其他的模塊就是不痛不癢了,特別是門户部分甚至在其官方沒有確切的入口。因此,大家也知道默認的門户模板是很久都沒有更新的,而且默認的確實有點上不了枱面; 比如今天就跟大家説説門户的列表頁吧,我就通過我之前做的一個實例來分享下改造過程吧,實現後就是下面的樣子,接下來我就講解下基本的思路吧。

 

  第一,設計好樣式並不書寫好 HTML 和 CSS,當然這也是最簡單的一部分。這一點我相信只要懂做網站的朋友都會,甚至可以直接 copy 那些比較優秀網站的前端代碼,也就是大家所謂的仿站中的一部分。當然我建議還是自己設計出版式來,這樣更具個性,而且是你想做成什麼樣就是什麼樣的。

第二,調用動態參數。上面第一步我們完成的僅僅是一個靜態的頁面,而我們現在做的肯定是需要讓其內容動起來,而這些參數無非就是 DZ 內部的一些動態變量參數。比如文章的發佈日期的變量是 $value[dateline],文章的地址是 $article_url,當然這些參數只要參考默認模板中的即可。這裏又會有一個問題,也許大家可能會在這個頁面需要加上默認模板沒有的,而在默認模板其他頁面有的。是不是自己複製另外頁面的相應參數就可以了呢? 肯定是不行的,DZ 是一套比較複雜的系統,不同的頁面的很多參數是不能通用的,這樣就需要對部分進行二次開發。比如就如上面展示的列表那樣需要加上原來沒有的瀏覽數和評論數,就需要在相關的函數中添加一些功能性語句了,比如這個列表的相關函數存儲在

/source/module/portal/portal_list.php 中

在中間的自定義函數 category_get_list 中添加讓通用變量啓用的語句

$article_count = C::t('portal_article_count')->fetch($value['aid']); if($article_count) $value = array_merge($article_count, $value);

這樣進行簡單的二次開發後就可以在門户的列表頁使用 $value[commentnum] 調用評論數以及用 $value[viewnum] 調用瀏覽數了; 當然其他的一些功能也是類似的,當然需要你有一定的 PHP 基礎。

第三,優化性能。就如這種圖文列表的形式,我們不可能在一個單頁列表中包含的數據記錄數只會三五個,一般地我們得在單頁有近二十條數據,但這樣就會出現一個問題,當用户首次打開這個列表的時候數據量會特別的大。比如就二十條數據,圖片每個 40KB,光列表中的圖片大小就有了 800KB,這樣打開起來肯定不可能太快。這裏就需要我們進行適當的性能優化,比如可以進行分屏加載,而使用 jQuery 和 AJAX 等技術都可以實現這些,比如 jQuery 的插件 Lazy Load 就可以實現圖片的分屏加載,當然至於怎麼用網上有很多相關的教程。在這裏我不得不提示大家,jQuery 默認情況下會與 DZ 的 JS 衝突,因為 DZ 變量用的 是 $ 開頭,而 jQuery 也是用 $這個所以會有衝突。解決的辦法也很簡單,jQuery 庫不改變,只在引用的時候改變一下就可以了,可以先賦予一個變量如 var jq = jQuery.noConflict(); 然後用這個變量 jq 代替引用中的 $就可以解決這個衝突了。

上面就是一個簡單的實例分享,希望對大家有所幫助。其實上面的內容也提示了大家一些問題,那就是最好自己先掌握一些基礎知識,同時不要胡亂添加一些代碼,比如很多站長甚至不知道 jQuery 會和 DZ 衝突,而在網上隨意下載特效添加在網站中,這樣不出問題才怪!