王林
摘 要:在互聯網迅猛發展的今天,各種網站平臺層出不窮,技術手段也不盡相同,如JSP、ASP、PHP等都占有相當的市場份額。對于PHP的開源免費高效率,更加受到了開發人員的青睞,而基于PHP的CMS(內容管理系統)也得長足的發展。本文主要針對XDCMS這個相對簡單的內容管理系統來剖析CMS系統的原理,給PHP初學人員一些借鑒和思路。
1 引言
CMS(內容管理系統),主要實現新聞內容的發布、修改、刪除等操作。主要模塊分為:會員模塊、內容管理模塊、文件上傳模塊、無限級分類模塊(用于欄目分類)和后臺管理模塊等幾大模塊。現如今主流CMS系統都使用smarty模版引擎技術,將變量動態分配到前臺頁面顯示,省去了前端工程師不懂后臺程序的煩惱,極大地提高了團隊協作的效率。CMS系統還有一大特征就是使用了數據庫,由于開源免費、執行效率高等特征,PHP主流搭配的都是Mysql關系型數據庫,這也使得Linux、Apache、Mysql、PHP被稱為LAMP黃金組合。
2 CMS之總體架構分析
我們首先進入XDcms系統文件來剖析一下它的目錄結構:index.php是系統的主入口文件,admin為后臺目錄,cache為系統緩存文件目錄,data為系統數據庫目錄,system為XDcms框架主目錄,uploadfile為上傳文件目錄。系統在運行時(如在瀏覽器地址欄輸入:http://localhost/xdcms回車進入),首先通過Apache服務器解析,判斷系統的運行環境,如果系統中存在data/config.inc.php文件,則該系統已成功安裝,否則系統進入install/index.php文件執行安裝過程,安裝過程主要是對系統所需要的環境進行配置的一個過程(如:數據庫服務器主機地址、數據庫賬號、數據庫密碼、數據庫名、數據庫表前綴等),安裝成功后,系統將自動生成相應的數據庫和數據表結構,同時在data文件夾里也相應地生成config.inc.php文件,等到系統下次運行時,判斷該文件已經存在,直接跳過安裝,進入系統正式運行過程。在現在所有的CMS系統中,都產用了include或require函數來包含文件,當服務器進行解析時會將被包含的文件拿到當前文件包含的位置執行,這樣做既方便了操作更大大地提高了代碼的重用性。
3 CMS之關鍵技術分析
CMS之核心在于運用OOP(面向對象編程)的思想。在系統設計之初,程序員會將一些常用功能封裝到類里面(如:基礎類,數據庫操作類,分頁類,文件上傳類等),需要用到某個功能模塊時,通過實例化一個對象來完成所需的功能,在XDcms里系統的核心類文件都放在\system\libs文件夾下,所有的類文件都通過extends關鍵詞來繼承base.class.php文件里的基礎類,通過繼承來達到功能的繼承。
4 CMS之數據庫設計
數據庫在現如今的網站開發中起著舉足輕重的作用,它的設計成敗直接關系到整個網站的運行效率。XDcms在運行之初建立了6張數據表:c_admin為管理員表、c_category為欄目表、c_config為網站配置表、c_content為網站內容表、c_model為模型表、c_model_field為模型字段列表。系統通過寫在數據庫操作類(mysql.class.php)中的方法來完成數據庫的增(insert)、刪(delete)、改(update)、查(select)操作,然后將得出的結果返回給變量,然后通過smarty模版引擎技術,將變量分配到前段變量,從而使得前臺腳本能夠動態獲取后臺數據庫的數據。
5 CMS之session cookie機制
當你在瀏覽網站的時候,WEB服務器會先送一小小資料放在你的計算機上,Cookie會幫你都記錄下來。當下次你再光臨同一個網站,WEB服務器會根據上次留下的Cookie資料內容來判斷使用者,送出特定的網頁內容給你。Session與Cookie相似,只不過是一種服務器端的存儲機制。
6 CMS之前臺模板頁面
要選擇這個唯一的DIV標簽,可以通過#header選擇器來選擇,然后就能單獨定義樣式了。所有的網頁文件都應遵循W3C規范,這能大大提高瀏覽器的兼容性和執行效率。Javascript腳本在web2.0也起到了至關重要的作用,它能實現人機交互的智能化,如果你在填寫一個身份證號時少填了一位,還需要等待漫長的后臺判斷過程的話,那你就OUT了。Javascript腳本可以在前段快速地幫你判斷你填寫的內容是否符合規范,極大地縮短了用戶的等待時間。7 總結
網站開發是一個復雜而精細的工程,這里以簡單的XDcms為例來講解CMS系統,給初學者一些借鑒和思路,許多不足之處還需我們共同研究推進。網絡需要創新,需要不同的人去嘗試探索,向著更深更寬的方向進行擴展研究,最終推進網絡的不斷發展和進步。
[參考文獻]
[1]高洛峰.細說PHP[M].電子工業出版社.2009(1).10-01.