帝國、PHPCMS及織夢三款CMS比較
早期的文章管理系統,資料表字段模型都會內建好,按自己的思路,把文章模型、資訊模型、圖片模型都內建,然後使用者根據需要,在設定欄目時選擇不同的模型,實現不同的需求。然而這種內建模型欄位的方式,不能很好的滿足站長的各種個性化需求,所以各種CMS都推出了自定義模型和自定義欄位的功能。
對於PHP程式設計師來講,自定義模型實際是在資料庫中建立一個新的資料表,然後新增不同的欄位來記錄不同的資料,自定義欄位功能,即在原有資料表中新增新的欄位,或者在附加表中新增新的欄位,然後根據資料模型進行資料寫入、資料查詢讀取、資料在模板中的展示操作。而CMS的模型自定義功能,則是把這一系列操作內建,流程化,自動化,建立模型,選擇不同的欄位型別建立欄位,根據不同欄位型別,自動生成後臺資料錄入介面和前臺資料展示頁面。站長不需要程式設計知識即可很方便的根據自己的需求,設計不同的資料模型,更加方便站長個性化建站。同時,懂PHP程式設計的站長,除了能夠很方便的建立各種模型外,省去了資料錄入和資料查詢展示的重複操作環節,專注於個性功能的開發,能夠更快更好的製作各種各樣的功能模組。
前面部分說到了自定義模型的優勢,那本文下部分主要從自定義模型流程對比、自定義欄位欄位型別對比、自定義欄位選項對比(主表副表、前臺投稿、設定許可權等)三個方面。
詳細對比分析下帝國CMS、PHPCMS、DEDECMS,這三款CMS的優缺點。
1. 自定義模型流程對比
在CMS中自定義模型,我們一般最期望實現的兩點是1)在資料庫中建一個表,並且可自由設定表中有什麼欄位;2)建好欄位後,後臺資料新增表單能自動生成,前臺資料展示直接能通過標籤呼叫,而不需要自己寫讀取資料的PHP程式碼。
那麼這三款CMS中是怎樣滿足我們的這兩點期望的呢?
按照帝國CMS的官方提示,帝國CMS自定義模型一般步驟為1)系統分析、2)建立資料表、3)建立欄位、4)建立系統模型。
帝國自定義模型的建立步驟實際為先建立一個數據表,然後建立欄位,每一個欄位類據型別等作詳細設定後,再整體控制各個欄位的用途及前臺後臺資料錄入介面的格式即建立系模型。建立系統模型的過程實際是對資料欄位在模型中所扮演的角色和許可權的分配過程,如是否作為錄入項、是否作為投稿項、是否可增加、是否可修改、是否作為結合項等。
按帝國的思維,建表和建欄位只是完成了建資料庫的操作,而系統模型建立的過程則為規劃資料庫如何使用的過程。
PHPCMS中新增自定義模型只有兩步,先建立模型,然後新增欄位。在新增模型的過程中不僅完成了一般意義上的建資料表的工作,同時,也完成對模型的一些初始化設定,如模型中的資料是否生成靜態,欄目頁、列表頁、內容頁的模板及URL規則等。
新增完模型後,會自動生成一部分欄位,可對這些欄位作修改或刪除處理,同時可以自由增加欄位。
PHPCMS中自定義模型建立欄位時除了選擇封裝好的欄位型別外,也整合了對欄位屬性的設定,如是否在前臺投稿中顯示、是否作為標籤預設讀取欄位、是否作為標籤呼叫排序欄位等。
DEDECMS中自定義模型建立亦分為兩步完成,建資料表作初始化設定然後新增欄位。新增模型時可選擇模型是自動模型、系統模型還是獨立模型。獨立模型可突破原來的主表+副表的模式,方便小資料量的靈活處理。
從三款CMS的自定義模型流程對比來看,帝國CMS的屬性設定相對更為細緻但似乎簡潔性不夠,很多描述過於專業或者不夠明確,站長朋友們需要看較多幫助文件才能瞭解到每項的意思,而PHPCMS和DEDECMS中則相對簡潔,一目瞭然知道每一項的涵義;PHPCMS和DEDECMS在建立模型表的同時完成了對模型的初始化設定,整個設定是針對整個模型的,與具體欄位無關,屬全域性性設定,而帝國CMS中模型的設定則是整合了對欄位的整體操作,在建好欄位之後,細化到對欄位的細節控制,屬“微觀調控”。
帝國CMS中能夠單獨設定欄位的前臺後臺展示模板,相對更為靈活些; PHPCMS中則由於欄位型別是以元件形式封裝的,前臺後臺資料錄入介面自動生成,簡便,但在某些時候需要自定義部分欄位的表單HTML時只有在模板中使用邏輯判斷才能實現,靈活性稍缺乏。DEDECMS模型設定和PHPCMS類似,DEDECMS這塊的優勢在於可以選擇資料模型是主表+副表的模式還是獨立表模式,並且可以自由設定前臺後臺的資料處理PHP檔案,方便二次開發。
按我的經驗來看,帝國CMS這塊的設定雖然很細緻,但實際把問題複雜化了,據觀察,帝國CMS的使用者自定義模型的深度使用者並不多。實際按照PHPCMS和DEDECMS的思路,建模型資料表的同時,對模型作一部分全域性設定,然後單個欄位中根據不同欄位型別及不同需求作細節設定,這樣的流程更直觀更方便。
另外,PHPCMS中自定義模型後可直接預覽模型的資料錄入介面,方便檢視欄位設定的效果,這點非常方便。
所以,從自定義模型細節易用性對比來看:DEDECMS>PHPCMS>帝國CMS。
2.欄位型別對比:
CMS中自定義欄位有一個很好的優點就是都封裝好了一些常見的欄位型別,建立欄位的同時,直接設定好了欄位對應的表現形式,選擇不同的欄位型別,在會員中心投稿表單介面、後臺資料錄入介面及前臺資料展示介面中都會有所不同,並且是自動呈現。舉個例子,如果是PHP程式設計師需要實現對文章內容的儲存,除了需要在資料庫中新增一個欄位外,還需要在資料錄入表單中新增一個textarea,同時還要引用一些編輯器如fckeditor等。過程比較費事,並且存在許多重複性勞動。而如果在PHPCMS或者帝國CMS中實現這一需求,則只需要在建立欄位時選擇“編輯器”欄位型別,在DEDECMS中也類似只需要選擇“HTML文字”型別的欄位即可。因為CMS的欄位型別都將各種不同的欄位進行了封裝,新增欄位時直接選擇,然後自動生成的資料錄入介面中和前臺資料展示介面中,程式都會根據欄位型別作一些處理,然後自動輸出。(PHPCMS中生成表單介面時會呼叫input_form相關的類根據欄位型別進行處理,在輸出資料前,會呼叫output_form相關的類根據不同欄位型別對資料進行處理)。
帝國CMS的欄位型別 | PHCMS的欄位型別 | DEDECMS的欄位型別 |
單行文字框(text) 密碼框(password) 下拉框(select) 單選框(radio) 複選框(checkbox) 多行文字框(textarea) 編輯器(editor) 圖片(img) FLASH檔案(flash) 檔案(file) 日期(date) 顏色(color) 選擇外表關聯欄位(linkfield) 下拉外表關聯欄位(linkfieldselect) | 單行文字 多行文字 選項 數字 編輯器 日期和時間 顏色和字型 圖片 多圖片 檔案 映象下載 多檔案上傳 欄目 類別 地區 標題 作者 來源 關鍵詞 會員組 會員ID 推薦位 模板 轉向連結 分頁選擇 視訊 聯動選單 | 單行文字(varchar) 單行文字(char) 多行文字 HTML文字 文字儲存HTML資料 整數型別 小數型別 時間型別 圖片 圖片(僅網址) 多媒體檔案 附件型別 使用option下拉框 使用radio選項卡 Checkbox多選框 聯動型別 |
從上表可見PHPCMS中欄位型別的的豐富程度和實用性是明顯優於帝國CMS和DEDECMS的。DEDECMS欄位型別稍多於帝國CMS。
即:PHPCMS >DEDECMS>帝國CMS。
3.自定義欄位屬性選項對比:
有些時候設定的一些欄位,我們希望只有管理員才能設定該欄位的值;有些時候,新增的一些欄位,我們希望能夠方便和標題摘要一起在文章列表中呼叫;有些時候,新增的一些欄位,我們希望這個欄位新增後不能再被修改;有時些時候,新增的一些欄位,我們希望實現只在後臺資料錄入介面中顯示,而在前臺投稿中不顯示……這時候,靈活的欄位屬性選項,顯得尤為重要。
那麼這三款CMS中的欄位屬性有哪些差異?哪個最能滿足使用者的需求呢?
1)自定義欄位是否可選擇是否存在主表還是副表?
PHPCMS2008和DEDECMS的自定義欄位只能新增到副表中,帝國CMS自定義欄位則可選擇是新增在主表中還是副表中,這樣的好處在於,自定義欄位可以方便作為資料呼叫條件和查詢條件和在文章列表中呼叫,而如果單純只加在副表中,一旦涉及到資料聯合查詢,效率會低很多,並且即使是簡單的標題+摘要+自定義欄位顯示的文章列表中都非得多表聯合查詢,人為增加SQL查詢複雜度,降低效率。很典型的問題是在涉及到聯動篩選的情況時,自定義欄位如果不能選擇儲存在主表中,會人為製造非常大的麻煩。
如上圖所示的,聯動篩選欄位(帝國CMS和DEDECMS中稱作結合項),如果是想要用PHPCMS2008和帝國CMS來自定義,售價、面積、戶型等自下義欄位,只能新增在副表中,結果是非常痛苦的,每個條件的查詢都要主表和副表同時查詢,並且查詢條件分期在主表中和副表中時,要同時滿足條件,非得join查詢。 如果涉及排序等,更是頭痛,反正是人為自找麻煩。如果能選擇直接把欄位字義表主表中,這樣,這類資料量儲存不大的欄位,不會明顯增加主表的負擔,但查詢和讀取都直接是單表操作,非常方便。帝國CMS中這點做的比較不錯,並且有提供了單獨的結合項功能。DEDECMS中貌似也有結合項功能,適用於多條件篩選的情況。
所以,這一點,帝國CMS>DEDECMS>PHPCMS。
2)欄位的許可權設定
有些欄位,只希望在管理員或者編輯人員在編輯資訊時才能設定,普通使用者不給設定許可權,這就需要給自定義欄位一個完整的許可權系統。這一點PHPCMS中做的非常不錯,可以直接能過勾選“不允許設定該欄位值的會員組”的選項來實現。帝國CMS中最後一步“系統模型建立”中“可增加”、“可修改”這幾項似乎有許可權設定的影子,只是實現了部分許可權功能,而DEDECMS中則沒有看到明確的欄位許可權設定選項。
所以,這一點PHPCMS>帝國CMS>DEDECMS。
3)不在前臺投稿中顯示
有些時候設定某些欄位,雖然普通會員也可以有給他賦值的許可權,但是不需要或者不想在前臺投稿中顯示(如摘要等,有時候想簡單點,只讓使用者發個標題和內容),所以很需要實現某個自定義欄位只在後臺編輯時可以填寫,而在前臺投稿介面中不自動顯示。關於這點,在PHPCMS中只需設定“是否在前臺投稿中顯示”項為否即可,DEDECMS中欄位選項中“前臺引數”項中的“前臺投稿及採集規則禁用本欄位”亦實現了這一需求,至於帝國CMS中,可以通過系統模型設定是否為錄入項實現,但似乎不夠直觀。
有時候,在使用PHPCMS自定義欄位時,不希望欄位在前臺投稿中顯示的另一個原因是,想對新增的一部分欄位的表單樣式作單獨的修改或者作一些JS處理,PHPCMS內建的欄位樣式不太夠用或者不太方便,所以在設定欄位時選擇不在前臺投稿中顯示,然後在模板中按需求手動新增這個欄位的表單項,這一點在DEDECMS中有自定義表單HTML項,不需要像PHPCMS中這樣變相實現欄位HTML項的定義,帝國CMS中新增自段時有提供定義前臺後臺錄入資料表單HTML的設定項,但他同時寫出了提示“增加欄位時請留空”,這個做法不太理解,不過,他在進行系統模型定義的最後一步可以統一設定每個欄位的前後臺數據錄入介面表單HTML。不過,DEDECMS和帝國CMS中的字兩項設定對普通新手使用者可能反而帶來疑惑,對熟悉二次開發的倒是挺方便的。
從這個小點來看,普通使用者PHPCMS>DEDECMS>帝國CMS,二次開發DEDECMS>帝國CMS>PHPCMS。
關於帝國CMS、PHPCMS、DEDECMS這三款CMS自定義模型功能,實際還有很多值得對比分析的地方,都各有優缺點,實現應用中總會有感覺很爽的地方,同時也會有很糾結的地方,在這些方面我是深有感觸的。
當然,本文並不在絕對的得出哪款CMS更好,哪款CMS不好的結論,只是根據自己實際使用的感觸作一些簡單的對比分析,上面對比的誰優於誰也只是基於我個人的感受,具體不同層次的使用者依個人習慣可能感受不同,希望能給朋友們一些參考。