| 在代碼層次上看,SinaCMS是使用C++編碼的,模板取數據的時候則使用了perl腳本。SinaCMS里面頻道、項目和模板是結合在一起的,他們三者的關系是: 
 不難看出,SinaCMS具有極其強大的靈活性。因為它的數據庫結構是項目建立以后構建模板的時候才確定的。各個頻道,例如資訊頻道、財經頻道和汽車頻道,可以擁有完全不同的數據庫結構,不同頻道的特殊需求也可以完全定制。另外可以看出SinaCMS里面的模板是最主要的模型,承擔 了確定數據表結構、文章發(fā)布和管理以及配置頻道參數等等功能。 我們來看CMS系統(tǒng)中常見的新聞頁,頻道首頁和列表頁在SinaCMS中是怎么實現的。 編輯上文章時,先找到該頻道的新聞頁,然后在下面錄入文章,錄入完畢后點擊發(fā)布,系統(tǒng)會根據模板的內容去獲取相關的字段內容,根據模板的屬性最后發(fā) 布成相應的靜態(tài)文件,其間如果和其他模板有相關關系(在新聞頁模板域中定義Application::PostInPage),則會去觸發(fā)相應的模板(例 如首頁和列表頁)更新。 在首頁模板的區(qū)塊中,可以分為動態(tài)和靜態(tài)兩種。對于需要經常更新的靜態(tài)區(qū)塊,可以獨立出來做成一個模板,靜態(tài)區(qū)塊就相當于該模板下的一篇(有且僅有 一篇)文章,當然也可以在首頁中新建一個Form::TextField的模板域。動態(tài)區(qū)塊例如動態(tài)新聞列表,則可以在首頁中新建一個 Application::SQLResult的模板域,通過執(zhí)行perl腳本獲取內容填充,然后在首頁模板內容引用該模板域,當然同樣也可以新建一個只 包含一個Application::SQLResult域的模板。 對于列表頁,首先列表頁的分頁值可以存儲在列表頁的模板域中,也可以保存在某個模板中。分頁在處理時,會通過perl腳本來執(zhí)行分頁算法。最終所有列表頁都是列表頁模板下的一個文檔集。 在一個項目中,為了提高發(fā)布效率,還會存在若干的臨時存儲表和歸檔表(其實就是一些模板啦)。例如在首頁的動態(tài)新聞列表,就有可能建一個臨時存儲數 據的模板,這時如果頻繁更新首頁或者含有動態(tài)新聞列表的模板時,無疑將減輕數據庫的壓力。新聞單頁的模板在處理時可以就保存最近一個月內的文章,尤其在文 章數據增長較快的頻道,這時就很有必要。那么以前的文章就需要轉儲到一個歸檔表中,作為查詢和偶爾更新某篇文章使用。 SinaCMS中的頻道路徑path(例如資訊>大陸>正文)是通過模板處理的,在模板的模板域中會用perl來處理相關的邏輯。子頻道和專題也是通過模板來實現的,它會通過新增一個模板來建立子頻道和專題之間的關系。 至此,我們可以了解到SinaCMS中使用了非常多的冗余字段來存儲本來需要多表聯合查詢的數據,這無疑提高了文章的發(fā)布效率。 在其他的CMS中,模板只是獨立概念中的一個,而在SinaCMS中,萬事萬物皆模板。 | 
|  | 
來自: 昵稱18263306 > 《未命名》