在中國網際網路中,也許從業者無人不知道 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 衝突,而在網上隨意下載特效新增在網站中,這樣不出問題才怪!