摘要:內容管理系統(CMS)為基于Web的信息管理提供了一種新的形式,即圍繞“內容”來運作。CMS框架則進一步為內容管理活動定義了一整套規則和流程,并提供了某種程度的原型。typo3作為一個優秀的CMS框架,除了一般框架都有的特性之外,還特別提供了針對多語言系統的支持。該文介紹了使用typo3來開發一個多語言門戶系統的過程和經驗,并結合具體實例說明typo3為此類系統開發帶來的便利。實踐證明,typo3是一個強大、高效、便捷的CMS框架。
關鍵詞:typo3;內容管理;擴展;多語言開發
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)31-0885-03
Multi-language Portal System Development Based on Typo3 Content Management Framework
LU Qi, MU Bin, LIU Yan
(School of Software Engineering, Tongji University, Shanghai 201804, China)
Abstract: Content Management Systems have presented a new way for Web-based Management Information Systems: work on the contents. CMS frameworks go a step further by defining a complete set of rules and procedures for that work. Typo3, one excellent CMS framework, provides besides the common features special support for i18n. This paper introduces some experience on the development of a multilingual portal system with typo3. Concrete examples are highlighted to illustrate how typo3 facilitates developing such kind of systems. Practices show that typo3 is a powerful, efficient and easy-to-use CMS framework.
Key words: typo3; content management; extension; multi-language development
1 引言
隨著網絡技術應用的豐富和發展,網站已經成為企事業單位進行自身推廣和宣傳的重要手段,而現代企業實施基于Web的各種解決方案時,不可避免地都要面對海量的數據內容:產品信息、客戶信息、新聞、廣告等等。事實上,很多系統往往不能迅速跟進海量信息衍生及業務模式變革的腳步,眾多問題也隨之產生:
頁面制作無序,網站風格不統一,大量信息堆積,發布異常沉重;
內容繁雜,手工管理效率低下,手工鏈接視音頻信息經常無法實現;
應用難度較高,許多工作需要技術人員配合才能完成,角色分工不明確;
改版工作量大,系統擴展能力差,集成其它應用時更是降低了靈活性;
缺乏對多語言的支持;
內容管理系統,即CMS(Content Management System)很好地解決了上述問題[1]:它為網站管理員提供圖形化后臺,極大地簡化了內容的工作;它將網頁的內容、結構、顯示有效分離,從而使得設計人員可以在不影響內容的前提下更改網頁的結構和顯示;一些內容管理系統還提供了可供擴展和定制的機制,為開發人員提供了便利。Typo3作為眾多開源CMS中的佼佼者,除了上述特點外,還兼具對多語言的支持等諸多特性,近年來在國外已被廣泛使用[2]。筆者參加了一個企業級多語言門戶網站的開發,總結出了一些使用typo3框架的經驗,現介紹如下。
2 Typo3框架原理
2.1內容管理系統
要理解typo3技術框架,首先應該了解該框架的本質:內容管理系統。
所謂內容管理系統[3]指的是能使內容的創建人員、編輯人員、發布人員提交、修改、審批、發布內容的工具。此處的內容包括文件、表格、圖片、數據庫中的數據等信息。而對內容的管理就是施加在“內容”對象上的一系列處理過程,包括收集、確認、批準、整理、定位、轉換、分發、更新、存檔等,同時這一系列過程也會受限于相應的規則和流程,以保證內容的一致性和準確性。
我們可以認為CMS這個基于Web的系統綜合管理及信息發布系統是個完整的業務模型,也是一個完整的解決方案;同時,它還是一個應用系統架構。在框架下,有一系列掛接點,可根據需要掛接具體的處理模塊,并可根據具體的客戶,對該模型做適當的裁剪以適應用戶的需要。
內容管理系統[4]對站點管理和創造編輯所提供最大的好處在于用戶能夠使用模板和通用的設計元素以確保整個網站的協調。同時,內容管理系統也簡化了網站的內容供給和內容管理的責任委托。
2.2 Typo3框架
CMS已成為現代Web開發的一個基本組件,它之所以得到大規模采納,很大程度上歸功于高質量、低價格的CMS工具的涌現,這其中,開源CMS就充當了極其重要的角色。在眾多開源CMS中,Typo3是最接近商業化用途的網站內容管理框架(CMF)之一[5],其強大的功能包括:完善的用戶和權限管理、認證系統;人性化的各種操作向導;支持操作日志、系統級緩存控制;支持離線編輯、前臺編輯、內容導入導出、全文檢索、版本控制、流程控制;支持多站點、多數據庫;成熟完善的模板機制和擴展機制。
Typo3框架的體系結構如圖1所示,它是一個基于PHP4/PHP5語言和MySQL數據庫的網絡應用軟件。通常Windows處在最低層,提供操作系統;Apache Web服務器處在次低層,提供獲得Web頁面的機制,動態頁面通過Apache和PHP創建;MySQL作為數據庫服務器,用來建立維護數據庫。
Typo3框架的主體部分則充分體現了模塊化的設計給框架帶來的靈活性和優越性,它主要包括內核部分(CORE)和用于各種擴展的插件部分(Extension)兩大塊。前者是由Typo3核心小組人員負責開發管理,除了認證、數據庫、接口、框架、安裝等基本核心功能外,它還對外留出了擴展API,使得整個框架在功能上可以靈活補充。后者Extension則可由使用Typo3框架的開發人員根據需求自行定制開發,同時Typo3的網站上也提供了超過800種的現有通用擴展,如文檔庫、搜索引擎、網站統計、網站登錄等,通過對這些組件的有效復用,開發人員只需把時間用在特定需求模塊的開發上,從而大大縮短項目開發周期。
在整個項目開發完畢后,交付物是由前臺網站和管理后臺兩部分組成[6]:前臺網站是相應的擴展通過網頁模板來展現具體內容,以供普通用戶訪問;管理后臺既包含了用于管理內容的后端,同時還提供了用來顯示網站的前端引擎,以便于管理員對內容的管理以及開發者對網站的維護。
3 基于Typo3的系統開發
從整體而言,基于Typo3框架的開發依然遵循了模塊化的MVC模式,不同的在于Typo3利用框架自身的優勢,為開發者提供了諸多簡化開發過程的功能。例如,開發者在使用TCA(Typo3 Content Access)進行內容數據建模的同時,Typo3就能在后臺自動映射創建出相應的內容管理后端;又如,Typo3在后臺提供對內容以及頁面的訪問控制,開發人員通過簡單配置即可完成。
開發的流程可以具體分為以下幾個步驟,如圖2所示。
3.1 搭建環境
利用一般的php開發環境, 并從Typo3官網下載typo3.zip安裝包,解壓成普通應用即可。
3.2 開發擴展(Extension)
Typo3的特點之一就在它的高度可擴展性,整個框架在核心代碼的支撐下配以不同的擴展代碼就可滿足各種系統的需求。因此,在開發初期,首先要根據功能需求將系統劃分成相互獨立的模塊,建立相應的擴展(Extension)。這樣的設計能很好地應對各種需求變更所帶來的不便,例如當項目到某個階段需要增加新的功能時,開發人員只需再重新引入一個新Extension而避免了對整個系統的改造。
開發Extension先要創建Extension配置文件。為了能使開發的Extension整合到框架中,Typo3對于Extension的配置文件給出了統一的標準,主要包括標題、描述、優先級、依賴性、版本等,通過這些信息,Typo3的Extension Manager就可以在安裝Extension的時候加以識別并整合,具體每一個Extension的開發可以分為以下兩個部分。
3.2.1 創建內容
在數據建模部分,開發人員先要用UML設計數據關系,然后用Sql語句在數據庫中創建相應的表。此外,為了能在后臺對這些數據進行有效管理,Typo3提供了一種快速有效的映射方式用于生成管理后端:TCA。其本質是由Typo3預先定義好規范的一系列數組結構,配置TCA也就是將數據表以及表里的字段信息以Typo3框架能夠解析的方式加以描述,從而使Typo3在安裝Extension的同時能夠自動生成與數據表相應的圖形化內容管理后端。
此外,TYPO3在數據庫層實現了整個系統對多語言的支持,默認情況下它使用系統靜態表sys_language來存儲當前系統支持的語言種類,并且在數據庫級別為每種語言都存儲相應記錄,任一實體記錄通過外鍵引用系統sys_language表主鍵uid來確定各條記錄所使用的語言種類,如下圖3所示。
其中sys_language_uid是引入的外鍵,i18n_parent是實體表中主語言記錄的uid,從而在這個實體表中形成以主語言記錄為父節點,輔語言記錄為子結點的樹形結構,如表2所示。
3.2.2 創建插件(plugin)
前臺的開發主要是以開發插件(plug-in)的方式進行,每個Extension可以包含若干個插件,每個插件可以是該模塊中某個功能點的實現。最終在創建頁面的時候,插件將作為頁面元素被添加到頁面上,或獨立存在或與別的插件相互組合,這樣的開發方式非常有利于對組件的復用。
Typo3框架還提供了豐富的庫函數便于插件等的開發,包括數據庫的操作、頁面的顯示等。開發的插件類需要繼承tslib_pibase基類,并實現main方法,方法的返回值是最終要顯示的內容。
Typo3框架默認會對所有頁面進行緩存,這對于靜態頁面而言提高了網站性能,但是動態創建的頁面則需要有所調整。通常,Typo3是依據網頁的URL(不含參數部分)的唯一性進行緩存,因此需要加上cHash參數,使其根據cHash唯一值進行緩存。筆者的做法是通過MD5算法將原有URL中所帶參數產生唯一的cHash值,從而可避免Typo3對動態網頁進行錯誤的緩存。
3.3 部署Extension
Typo3的后臺里包含了Extension Manager,用于框架Extension的安裝與卸載。每次安裝,Typo3都會檢查數據表里的字段是否改變并加以更新,對于Sql里已經刪除的字段也不做物理刪除,而內容管理后端的顯示則完全取決于TCA的配置。
TYPO3的List菜單項是TYPO3系統中的Model部分,管理了整個站點的所有數據。在List菜單項中站點管理員可以創建,修改和刪除各條數據。在List中,站點管理員必須要先建立主語言數據,才能相應的建立輔語言數據。
Typo3后臺將整個網站的結構映射成樹形,其中的節點可以是頁面、頁面鏈接、系統文件夾等。頁面元素在Typo3框架中也是作為內容數據保存到數據庫,并且有系統自帶的TCA,因此,它的創建過程與其它數據類似,創建的時候可以選擇頁面的布局和內容元素。為了簡化網頁的創建以及保證網站整體風格的統一,Typo3框架除了提供默認的簡單布局外同時也支持頁面模板的使用,這使得頁面的顯示和內容分離,更符合層次化的設計。頁面是內容元素的容器,頁面的內容元素既可以靜態的文字、圖片、媒體,也可以是插件。對于多語言頁面,站點管理員需要首先創建頁面,再創建頁面再創建對應各個輔語言的頁面和內容元素。
4 應用實例開發
下面結合一個具體實例來說明該開發流程的應用過程。
歐華信息交流網是在中國和歐盟之間實現人力資源,項目交流,教學資源以及地區及文化交流資源共享的信息平臺(http://www.eurochinacom.eu)。目前,該網站提供英語,德語以及中文支持,并且計劃在將來提供更多的語言支持。本文結合其中”All about study”模塊的university detail插件為例加以說明,其主要是用于集中展示各校信息。
4.1 TCA部分的開發
TCA不僅支持簡單屬性的配置,同時也支持表之間關聯字段的配置,以下是university表的部分TCA片段:
//university表
$TCA[\"tx_ecc_uni \"] = Array (……
//sys_language_uid 字段'sys_language_uid' => Array (
'config' => array (
//字段來源和屬性
'readOnly' => 1,
'type' => 'select','foreign_table'=>'sys_language',
'foreign_table_where' => 'ORDER BY sys_language.title' )),
……),
4.2 Plug-in部分的開發
該功能的實現如3.2.2節所述,以下是university detail的代碼片段,程序先從頁面參數中取得universityUid,并用數據層函數查詢出相應記錄,再以表示層方法返回html結果:
class tx_pi5 extends tslib_pibase{
function main($content, $conf) {
$this->model = new tx_eccuni_model($this);
$this->frontend = new tx_eccuni_frontend($this);
$this->universityUid=intval(t3lib_div::GPvar('universityUid'));
//數據層操作
$universityInfo=$this->model->getUniversityByUid($this->universityUid);
if(is_array($universityInfo))
//表示層操作$content=$this->frontend->viewUniversityDetailInfo($universityInfo);
//返回html結果
return $this->pi_wrapInBaseClass($content);
}}
4.3 最終頁面
圖4為實際網站的頁面截圖。
5 結束語
Typo3框架是一個優秀的開源內容管理框架,利用其高度可擴張性、支持多語言、通用插件庫以及庫函數齊全、有完善的模板機制等特性,可以在較短時間內開發出支持多語言的門戶網站。此外,Typo3功能強大的后臺以及靈活的開發方式也使得開發的網站可維護性很高。目前,該種基于Typo3內容管理框架的開發方式已在數個中小型web項目中有效實施。該模式在較大型系統中的應用和改進是下一步需要研究的方向。
參考文獻:
[1] 車東.內容管理系統(CMS)的設計和選型[EB/OL].[2007-04-12].http://www.chedong.com/tech/cms.html.
[2] Lewis-Bowen A,Evanchik S,Weitzman L.Using open source software to design,develop,and deploy a collaborative Web site,Part 1: Introduction and overview[EB/OL].[2007-3-15].http://www.ibm.com/developerworks/cn/web/i-osource1/.
[3] 魏鵬飛.內容管理系統在企業門戶網站建設中的應用[J].湖南電力,2006,26.
[4] 金花,曲俊華,謝萍.內容管理系統的研究[J].計算機與數字工程,2006(34).
[5] Typo3-最接近商業CMS的開源解決方案[DB/OL].[2006-08-01].http://oss.org.cn/modules/article/view.article.php/article=17.
[6] Royer D.HOW TO COPE WITH COMPLEXITY:THE USAGE OF TYPO3 FOR RESEARCH PROJECTS[EB/OL].Published under the GNU General Public License,2005.