經常見站長論壇有人提到選哪個CMS好,最近也又有朋友在51LA站長群里問到PHPCMS和帝國CMS比較選哪個好的問題,所以落葉今天從PHPCMS及帝國CMS對比的角度來談談站長應該如何選擇適合自己的CMS。
落葉自詡對現在主流CMS及建站程序還是有足夠多了解的,從接觸混互聯網開始使用過的并且作過小量二次開發的CMS和建站程序有早期的動易siteweaver、DEDECMS、PHPCMS2008、帝國CMS、科訊CMS、無憂CMS、風訊CMS 、DISCUZ、UCHOME、HDWIKI、新云CMS等(以前負責的一個網站是Siteweaver+2*PHPCMS+HDWIKI+DISCUZ7.0+UCHOME搭建的行業門戶,二次開發比較多,所以相對比較了解,至于其它CMS因為常有很多朋友向我問到各種各樣的CMS使用問題,所以我也常做一些測試和一些小量二次開發)。
從落葉的經驗來看,站長在選擇一款CMS時,大概一般會考慮如下方面:
1) 程序是否安全穩定,會不會經常有BUG
2) 程序使用簡不簡單
3) 程序生成靜態速度是否夠快
4) 程序模板多不多,模板好不好做,標簽好不好用
5) 程序負載能力強不強
6) 程序模塊多不多,如有沒有房產模塊、有沒有黃頁模塊、分類信息模塊、問答模塊等
7) 程序二次開發是否靈活
擅長或喜歡二次開發的基本首先會考慮二次開發的靈活性,及模塊方面有沒有適合自己的;而普通用戶則更多的考慮程序易不易于使用,模板標簽簡不簡單,所以CMS選擇的焦點基本集中的二次開發的靈活性和模板標簽的易用性兩方面了。
落葉接觸到的這些CMS或建站程序,也基本上是大家現在用的比較多的,其中PHPCMS是落葉最為熟悉的,二次開發最多的,而帝國CMS也只是最近因為有朋友要我幫忙使一些帝國CMS的插件和進行一些細節修改,所以才用到,對比發現PHPCMS和帝國CMS在很多設計思路上比較相近,但又似乎完全是兩種不同的風格,落葉覺得比較典型,所以以這兩款CMS來作對比分析。
1.從二次開發的角度來講:
在我看來,PHPCMS(2008版)更多算作是一個開發框架,離一個成熟的產品太遠,先后使用PHPCMS二次開發搭建過五六個平臺,從剛發布的PHPCMS2008版,及現在的PHPCMS2008 sp4版(pcv9不作評價,開發初期做過較多的測試、反饋過一些建議,但正式版我并沒用過),每一次我都會遇到同樣的問題,總是邊罵低級錯誤邊作修改,到現在官方停止開發了,很多剛發布時的BUG都還存在。雖然如此,PHPCMS仍然是首選的CMS,為啥,就是他很靈活,想怎么改就可以怎么改,想到即可以做到。在我看來PHPCMS代表了一種極端,即如果首要考慮二次開發,那PHPCMS是不錯的選擇。
PHPCMS中想實現任何數據的讀取只要寫一條SQL,然后面模板中GET標簽調用下就行了,如果覺得模板中處理的不夠,那么只需要在對應同名的PHP文件中作些處理就行了。甚至,只需要在頭部引用common.php文件,調用模板引用函數引用模板,然后建一個同名的HTML文件作為模板,即可在PHPCMS的基礎上實現很多想要的功能。
帝國CMS,雖然官方的宣傳語也是想到即可做到,但從我在對帝國CMS作一些簡單功能需求的修改及插件開發來看,帝國CMS離想到即可做到太遠,限制在帝國的開發思路之下,有些功能即使是很小的功能,也需要對帝國的核心程序大動干戈。就拿一個簡單的需求“我想獲取內容頁分頁的頁碼,以根據不同的分頁來實現一些不同的顯示”,這個需求的后面不談,單就獲取內容頁分頁的頁碼來講,幾乎是不可能,為啥呢?第一,他沒有這個標簽,也沒有提供變量,論壇里很多人提到這一需求,始終無法解決;第二,帝國的模板標簽解析方式是老的動易的思維即程序先處理好每一個標簽的結果,連HTML都帶上了,然后把存儲在數據庫中的模板讀出來,把里面的標簽一個一個替換,基本上內容頁的每一個標簽都是經過了一個專門的處理過程來實現,耦合度太高,大部分代碼都沒法通用。(現在主流模板引擎都是先把標簽解析編譯好,然后緩存,標簽已經變成可執行的PHP程序,然后程序處理好數據后直接調用模板緩存,執行。標簽都是通過統一的方式來處理的,通用性較強。)而也正因為每個標簽都封裝的很好,做的很完整了,所以使用起來又非常簡單穩定,只要按提示放上去,就不會有問題,所以帝國在安全性、穩定性、易用性又非常不錯。
舉例來說吧,有一個用帝國CMS做精品故事網的朋友(http://www.ythuaji.com.cn),想實現如下圖所示內容頁分頁標題導航。
我看了下,帝國論壇也有非常多的朋友有這個需求,但基本沒有看到有很好的解決。然后我看了下帝國的標簽的代碼,他內置其實有一個內容頁分頁下拉導航標簽。本來一般的程序的思維是實現數據和模板的分離,把數據處理好,其它的表現形式(是下拉列表,還是普通文字列表)這個交由模板來處理,而帝國中確全是由核心函數來處理的,在functions.php和t_functions.php中文件中單獨寫函數來處理這個標簽,并且把HTML都封的很好了,呈現給大家。我為了實現內容頁分頁標題導航列表,仿照他的標簽的實現方式,修改這兩個核心文件才能實現。而事實上,其它CMS中,只要先PHP文件中分析出文章的分頁標題,記錄成數組變量,然后在模板中用循環標簽循環一下就OK了,想怎么展現就怎么展現。
帝國CMS和PHPCMS同樣都有自定義模型的功能,在字段自定義方面,帝國做的更人性化些,更適合新手朋友使用,而PHPCMS功能上是沒問題的,有些設計上合理性差些,如定義字段只能存在副表(PCV9有了改進)。帝國CMS中每個模型都是單獨的數據主表+副表,不同模型間,數據ID無關聯,這樣的問題是不同的模型中有相同的ID的文章,涉及到全站數據操作的時候很糾結,非得一個一個判斷模型,落葉今天在設計一個帝國CMS插件時,深深的體會到了這樣的設計的杯具。PHPCMS所有模型共用一個主表,副表各自使用,即所有文章不管什么模型的標題、摘要等信息都存放在統一的表中,這樣全站進行數據調用都很方便,這樣的缺點也很明顯,自定義字段只能放在副表中,如果自定義的字段想作為數據調用的條件或者搜索條件,那就很杯具了,非得兩表聯合查詢,和把整篇文章的數據讀出來,基本沒啥區別。
簡言之,以這樣不太高的PHP水平,可以使用PHPCMS毫不費力的設計出各種模型,包括房產模型、問答模型、汽車模型等,只要了解模型的字段有哪些,流程怎樣,后臺建下模型,然后把list.php和show.php復制一份,作些個性修改,然后上傳下HTML文件模板即可,要偽靜態就偽靜態,要生成靜態就生成靜態。而如果以帝國作二次開發,那么也可以很方便在后臺自定義模型建表,但是數據流程處理方面靈活性就缺很多了,在使用他的數據操作類,操作數據后,要熟悉他的模板處理方面,讀取模板,然后單純的寫函數來替換變量標簽,如果要生成靜態,他原來的內容頁靜態生成函數還沒法通用,需要自己單純來寫一個靜態生成類。一句話,很痛苦!還不如自己全寫PHP了事。
下面是落葉此前在微博中的一些評述:
4月10日 10:52
落葉: 今天開始仔細研究下#帝國CMS#,一直在帝國備份王,但從沒細致使用過帝國CMS。帝國CMS初步印象:1.帝國CMS似乎延續幾年前的流行的ASP類CMS的風格,類似動易,尤其是模板綁定及標簽這塊;2.后臺模型自定義方面和PHPCMS比較象,但比PHPCMS做的要細致。
4月10日 10:58
落葉: 其實早前也有安裝過#帝國CMS#進行測試,而后來始終沒有用來正式建站:1.后臺太像老舊的ASP類CMS,而我對老一套的ASP類CMS的處理風格很反感;2.模板記錄在數據庫里:做PHP的更喜歡模板直接以HTML文件的形式存放,這樣修改測試都會更方便,而存儲在數據庫中每次修改、保存,都有心理暗示-“可以失敗”
4月10日 11:02
落葉: 大多ASP類CMS中模板都是存儲在數據庫中,在修改模板提交時,經常會有部分代碼因安全限制、服務器配置、基至IDC敏感詞過濾而提交失敗,所以這類CMS在個性修改方面總是不夠方便。ASP類CMS中的特例是科訊CMS,他采用了PHP的思路,綁定HTML文件存儲的模板,而PHP類CMS中#帝國CMS#是特例,用數據庫記錄模板
4月10日 11:04
落葉: #帝國CMS#按個人經驗,以HTML文本記錄模板,然后后臺綁定的好處在于:1.不擔心提交時模板損壞或在線修改無法撤消;2.要替換模板,直接FTP下載原模板,改名后上傳,后臺綁定,這點#PHPCMS#中做的似乎是最靈活的。可以任意為任何欄目任何頁面定義個性化的模板,而操作只是下載-》改名-》修改-》上傳-》綁定
4月10日 11:11
落葉: #帝國CMS#、DEDECMS更像成品,#PHPCMS#更像框架,單論標簽調用:帝國和DEDECMS內置標簽很多都局限在特定模塊或欄目,封裝完整,優點是用起來省事,缺點是不夠靈活;PHPCMS更適合程序員思路,一條SQL搞定,直接模板中用GET標簽SQL查詢,個性化開發很省事。試圖從帝國萬能標簽中找尋GET標簽影子,無果
2.程序穩定性模板標簽易用性角度講:
PHPCMS中的標簽都是以程序員的思維來實現,首頁、列表頁的標簽TAG標簽和GET標簽實際都是生成SQL語句,解析成函數執行;內容頁的標簽實現是變量,即PHP控制文件中把數據庫中的數據讀取出來,根據字段類型處理成干干凈凈的數據,放在變量中,然后PHP內容頁模板中直接使用這些變量,邏輯判斷也好,進一步函數處理也好,想怎么處理就怎么處理,更符合程序員的思維。但普通用戶用起來可能比較揪心,改個模板還要懂PHP邏輯思維和SQL語句,從PHPCMS部分模塊的明顯的BUG殘留來看,其實可以判斷那些模塊基本很少有人使用。(當然PCV9應該作了很大改進,這里不討論。)帝國CMS中的標簽才算是傳統意義上最正宗的標簽,他和動易(ASP類的CMS)的標簽處理思維極像,這個標簽是代表什么的,然后程序處理好后,直接整塊替換。使用起來非常方便,并且帝國在細節上做的也非常優秀,在模板的下方都仔仔細細標示出來所有可以使用的標簽,站長朋友們只需要按提示放上標簽就行了,省事,安心。缺點這樣標簽只算標簽,不是干凈的數據,處理起來缺乏個性化,雖然帝國CMS模板也支持PHP,便是由于他的模板生成方式沒是先解析變量成PHP,再處理,而是一邊處理好標簽的數據,生成時替換,所以限制也很明顯。上面有提到朋友的精品故事網是使用帝國CMS做的,在文中提到實際是有意推薦,因為這個朋友在不懂任何程序的情況下,使用帝國CMS把網站做得非常優秀,這也正說明帝國在細節上做的非常優秀。上面廢話了一大堆,其實基本意思也就兩點:不需要過多二次開發的朋友,使用帝國CMS等會相對比較不錯,而對二次開發要求比較多,并且對PHP比較熟的朋友,完全可以把PHPCMS當作一個框架來使用,BUG不是問題,這樣改的才爽,最怕是的像帝國那樣寫的很死了沒法改。當然,文章中主要提取帝國CMS和PHPCMS,似乎把使用DEDECMS的同學給忽視了,實現來講,我遇到的站長朋友使用DEDECMS的還是居多數,這款CMS穩定性和標簽的易用性是介于帝國CMS和PHPCMS之間的,落葉這里只是把兩個極端作了下分析,希望能給朋友們有些提示。