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