cms概述 。比較shopex和ecshop區別 。smarty模板引擎的入門
cms概述
為了找到一個合適的cms網站系統,我花了一番功夫搜尋了多種cms,包括我用過的和沒用過的,知道的和不知道的,當然,必須是開源的、免費的、生成靜態頁面的.到各自的官方網站,查看了有關資料,下載了最新版試用,對比各自優缺點。
風訊網站內容管理系統(FoosunCMS)
官方網站 http://www.foosun.net/
官方論壇 http://bbs.foosun.net/
最新版及更新日期 V4.0 sp4 20070412
下載地址 http://www.foosun.net/FsDown/DownLoad/
在CMS產品領域裡,FoosunCMS已形成內容管理系統整站解決方案。從《風訊網站內容管理系統》FoosunCMSv0410版至今天的《風訊網站內容管理系統》FoosunCMSv4.0版,系統經過幾次飛躍性改進,在原有的FoosunCMS系列優勢上取得的重大突破,更加“傻瓜”化、人性化,更加符合廣大使用者的需求,從而使得網站的架設與管理變得極其輕鬆!特別優化的模組化體系結構,強大的HTML靜態生成功能,便捷的後臺管理,以人為本的設計理念。
FoosunCMS系統包括了資訊採集、整理、分類、稽核、釋出和管理的全過程,具備完善的資訊管理和釋出管理功能,是企事業單位網站、內部網站和各類ICP網站內容管理和維護的理想工具。現推出FoosunCMS新版本是國內領先的第一款整合web2.0元素的、模組化的、開源的CMS建站系統。會員系統整合web2.0元素,滿足國內企業級主流市場建站對新興流行建站功能的需求,模版支援CSS+DIV自由設計,便於客戶簡單快捷的打造符合自己產品特色企業級門戶站點。
FoosunCMS新版功能系統模組化,自動更新等各類功能可由使用者需求自由組合,有特殊需要的使用者可以進行產品定製或者做第三方功能模組的開發。採用該系統客戶群體,如企業、門戶、政府各部門等可以隨時方便地提交需要釋出的資訊而無須掌握複雜的技術。
創力網站管理系統
官方網站 http://www.aspoo.com/
官方論壇 http://bbs.aspoo.com/
最新版及更新日期 v3.1.0622 20060622
下載地址 http://www.aspoo.com/Html/Soft/Products/31.html
《創力網站管理系統》英文全名《CreateLive CMS》以下簡稱“Cl CMS”:
是創力網和北京今日學易科技有限公司基於ASP技術開發的網站管理系統,是一個經過完善設計並適用於各種伺服器環境的易用、安全、高效、快速、優秀的網站解決方案。《Cl CMS》自1.0釋出以來,以安全、快速見稱。歷經《Cl Web 2.0》,再憑著豐富開發經驗,和不斷創新的精神,經過幾個月的努力,打造了全新的《CreateLive CMS 3.1》。
全靜態HTML檔案生成。《CreateLive CMS 3.1》獨創了HTML生成功能:
可將站點首頁、頻道首頁、各欄目、以及每個內容頁都生成靜態HTML檔案,大大提高瀏覽速度及搜尋量。HTML生成各頻道有14種生成檔案存放結構選擇,5生成檔案命名形式選擇,可隨意定生成的副檔名,一切更可能的根據您的喜好DIY。同時將各頻道導航、欄目導航、廣告等實行JS生成,並呼叫,更改後並自動重新整理JS,不必再全部重新生成HTML。
無限頻道複製功能。《CreateLive CMS 3.1》無限頻道複製功能:可無限複製文章、下載、圖片、影視等模版,複製出來的頻道,完全獨立設定,獨立模版。
各頻道完全獨立的強大JS功能。《CreateLive CMS 3.1》強大JS功能:強大的Js設定,採用標籤式管理,可自定義顯示內容及HTML程式碼,讓您非常容易的做出自己個性的Js。同時,Js每天會自動重新整理,讓您免去了每次都要進後臺點重新整理Js的煩惱。
再配合無限頻道複製,做一個自己個性的大站已不是夢想。
攻擊防護及管理事件記錄。《CreateLive CMS 3.1》以安全為基礎,周密的程式碼中設計,可自動遮蔽惡意攻擊程式碼,更整合防SQL注入程式。從而全面防止各種SQL注入攻擊手段,並進行記錄在案,保證了系統的安全和穩定。更詳細的管理事件記錄
管理員每一步後臺操作都記錄在案。
模板化體系。《CreateLive CMS 3.1》介面和程式分離,所有模組均通過標籤呼叫,整合類同Macromedia Dreamweaver一樣簡單的可視模板編輯方式,修改模板容易、快捷。
資料管理。《CreateLive CMS 3.1》提供強大的資料備份和恢復功能。可以線上備份、恢復、壓縮資料庫。檢視系統空間佔用情況、系統初始化、檢視伺服器資訊及到線上直接執行SQL語句。
科汛網站管理系統(KesionCMS)
官方網站 http://www.kesion.com/
官方論壇 http://bbs.kesion.com/
最新版及更新日期 V3.2 Build070411 20070411
下載地址 http://www.kesion.com/down/
科汛網站管理系統V3.2正式版整合Web2.0元素,她是一個經過完善設計有著及其強大的會員互動和獨特創新的內容管理系統。主要功能模組包括:文章頻道、圖片頻道、下載頻道、動漫頻道、音樂頻道、影視訊道、商城頻道、供求頻道、採集管理 、專題頻道等等。系統通用模組:使用者管理、部落格日誌管理、相簿管理、音樂盒管理、朋友圈管理、廣告管理、公告管理、模板管理、網站資訊配置、高階自定義SQL擴充套件標籤,RSS線上訂閱功能、網站統計、郵件列表、郵件群發、資料庫管理、站內短訊息、收費模組、檔案上傳、友情連結、調查管理、操作日誌記錄、縮圖及水印、IP訪問限制管理、Google站點地圖、站內搜尋小助理、線上HTML編輯器模組等。
Kesioncms V3.2是適用於各種服務環境下的的Web站點或商務平臺的最佳解決方案,她由科汛網路開發精心設計,是一款適合於從個人站長到各大企業方面應用需求的軟體,KesioncmsV3.1為您提供一個更安全、更穩定、更高效、更快捷的Web站點和一體化的商務平臺解決方案。同時系統採用人性化的Windows操作方式開發,操作簡單,執行速度快,伺服器資源佔用更少;無論在穩定性、負載能力、安全等方面都有可靠的保證並贏得了廣大使用者的良好稱讚。
JTBC(CMS)網站內容管理系統
官方網站 http://www.jtbc.net.cn/
官方論壇 http://www.jtbc.net.cn/forum/
最新版及更新日期 v3.1.0622 20061114
下載地址 http://www.jtbc.net.cn/down/
JTBC網站內容管理系統是一套開源,免費,並且可對現有模組進行擴充與克隆的網站系統核心,採用UTF-8編碼,採取 語言 - 程式碼 - 程式兩兩分離的技術模式,納入了模組安裝檔案的概念,全面的使用了模板包與語言包結構,為使用者的修改提供方便,網站內容的每一個角落都可以在後臺予以管理,是一套非常適合用做系統建站或者進行二次開發的程式核心。
JTBC與其他CMS相比,更注重於可擴充套件與可二次開發性。使用JTBC,您可以快速的構建一個網站,在此過程中更關注於網站設計方面的內容。如果您是經營著一家提供WEB服務的公司,您是否還在為程式設計師之間無法默契配合而傷神,是否還在冒著單一核心程式設計師的風險,使用JTBC您可以完全的解決這些問題:規避單一核心程式設計師風險,統一程式設計師工作,降低成本,擴大應用範圍以及增強工作效率,發掘其他工作人員的潛能(JTBC的簡單應用可以只瞭解HTML的相關內容),同時隨著JTBC功能的增強以及應用範圍的擴大而具備更大的應用實力。
KingCMS網站內容管理系統
官方網站 http://www.kingcms.com/
官方論壇 http://www.kingcms.com/Fornms
最新版及更新日期 BETA 1118 20061118
下載地址 http://www.kingcms.com/download.html
KingCMS 3.0 是一款小巧、高效、人性化的, 基於WEB技術的內容管理系統。
系統特性:
1) 部署簡單快速 系統安裝包僅一個admin資料夾,前端檔案全部經模板處理後生成,完全可以做到單模板網站
2) 全站生成真正的靜態html檔案 生成靜態文章和論壇,大大減少伺服器壓力,不僅是內容頁面,導航也是靜態HTML頁面
3) 可擴充套件標籤 基於xml名字空間樣式的標籤,呼叫簡單,呼叫樣式隨意自如
4) 支援多種瀏覽器及小螢幕 可支援 IE 5.5+, Firefox 1.0+, Mozilla 1.3+ and Netscape 7+ 和低解析度要求(800x600)。
5) 多國語言的支援 系統和語言包的分開設計,可以支援或自行擴充套件任何語言介面,不僅前臺不同的欄目指定不同的語言,管理員和使用者介面也可以根據需要設定介面語言。
6) 面向搜尋引擎的優化 使用者定義關鍵字詞庫,自動或手工插入關鍵字,自動插入頁面Description,自動生成站點地圖及GoogleSiteMaps檔案。
7) 生成縮圖(需要aspjpeg支援) 自動生成指定尺寸的縮圖,影象大小直接在標籤中指定。
8) 其他 a) 極快的生成。 b) 不需要用DLL元件。 c) 多重加密技術,安全性更高。
NB文章系統(NBArticle)
(挺好的一個系統,不知為何,官方網站和論壇一夜之間不做了,只留下一個演示網站和一個幫助網站)
官方網站 http://www.nbarticle.com/(沒有實質內容)
官方論壇 http://forum.nbarticle.com/(打不開)
最新版及更新日期 EliteArticle System Version 3.00 Beta2 2006
下載地址 各大原始碼下載站
官方幫助:http://help.nbarticle.com
NB文章系統(NBArticle)是由原NB聯盟一部分成員經過幾年的開發經驗積累而成的一個高效、簡潔、安全的文章系統,無任何多餘累贅的功能;高效的頁面執行效率,特別優化系統安全效能,可令你在茫茫網海中一支獨秀。與MS SQL Server結合,更能發揮更好的效果。
特色:
ASP+MSSQL的完美結合。本系統不同於市面上的所謂MSSQL版本只是單純的把資料庫形式由ACCESS轉為MSSQL,而是在程式中大量的時候儲存過程、觸發器,從而能夠最大程度的發揮MSSQL的海量資料處理能力。
給你真實的頁面執行速度體驗。我們承諾絕不使用某些系統所做的名為資料分表,實則清空資料庫的所謂程式加速方法,而是充分利用MSSQL的高效資料處理能力,即使在總資料100萬記錄,單個欄目50萬記錄的情況下,分頁平均只需30ms。
獨有的欄目許可權限制和強大的使用者管理功能,能夠讓你非常容易的管理使用者可閱讀的文章欄目和內容,從而讓你有不單是文章系統或新聞系統的暢快體驗。獨有的使用者投稿及個人文集功能。
合理的使用系統快取技術,在加速頁面執行的同時不對伺服器造成資源的浪費。
會員收藏夾功能。 強大的HTML生成功能。
頁面與程式的完全分離。獨創的MTT(Magic Template Tag)模版標籤功能,使管理員只需在後臺進行修改頁面模板,即可以完成網站的改版。
通用靈活的多模板設計方法。絕佳的系統安全。經過聯盟成員及兄弟團體的嚴格測試,本系統前後臺的安全效能絕對無容置疑。
文章欄目採用NB聯盟原創的無限級分類,操作簡明,功能強大,速度快捷。便捷的欄目排序、移動、合併功能。並能單獨對欄目設定外部跳轉連線。
人性化的後臺管理員許可權配置,細緻到某個欄目的文章釋出、稽核、編輯、刪除操作,使你方便的對後臺管理員進行細緻的劃分,並保證後臺管理的安全性及一致性。
使用者組強大的自定義設定功能,能夠使您方便快捷的對會員進行批量管理或個人自定義。
強大的後臺文章編輯器的功能。可方便地用拖動的方式進行圖文混排、圖片遠端上傳、上傳圖片顯示效果處理等操作,以及"從word中貼上"功能,能全部清除word排版格式多餘程式碼。 標題圖片可選擇從本地上傳或遠端圖片檔案中選擇。完善的評論及評論管理功能。 支援在多個線上編輯器中輪轉使用。
無論是asp版式還是html版式,均對搜尋引擎進行了優化,只需使用短短一段時間,即可馬上登陸搜尋引擎。
全系統UTF-8化。可方便用於建立面向其他國家語言的網站。
淘特CMS (以前沒有聽說過)
官方網站 http://cms.tot.name/
官方論壇 http://bbs.tot.name/bbs/
最新版及更新日期 tot-cms-5.03 20070525
下載地址 http://cms.tot.name/cms/download.htm
淘特CMS是我們根據多年入口網站技術經驗總結國內外優秀CMS系統開發出的一套穩定、安全、高效的內容管理系統。本系統注重安全、快速,經過出色的技術優化,保證免費版至少支援10萬條文章記錄快速釋出、管理等,目前是所有免費CMS中支援數量最多、執行速度最快的一個。後臺使用 ASP指令碼,管理操作方便,新增新聞時所有相關的欄目均會自動生成靜態頁面。而且各頻道的首頁、包括網站首頁等均可使用本系統的釋出功能,隨時生成靜態檔案。真正實現了全站的靜態生成。
廣告管理(系統廣告的線上管理,新增、修改刪除)。資料庫線上修改功能。包括“新建表”、新增、修改欄位等。儲存遠端圖片的功能。新聞自動採集功能。RSS新聞聚合功能。JS檔案的線上管理,新增、修改、刪除。
===================================================================================
比較shopex和ecshop區別
shopex和ecshop那個好?
shopex 是一款免費程式 但是並非開源程式 其功能還是比較強大 ecshop是一款開源程式但是如果用於大型商業 都是要買版權的 在國外如果你使用非授權的程式做商業活動只要該軟體提供商發一份email給idc商,你的網店就會馬上被關閉!!! 所以 如果你剛起步 建議 使用ecshop 因為他開源你可以對前端的模板 已經後臺的功能做個性的修改 (前提是 你對模板和程式有一定的瞭解)!!個人感覺 ecshop執行速度要優於shopex,shopex4.72 是非常慢的 不生成靜態頁面 慢的不行 shopex4.8 因為用了框架雖然速度快了點 但是還是慢 而且前端使用js框架mootools 對模板的製作限制太多!!!但是有一點 ecshop目前是率屬於shopex總公司的!!所以 你用ecshop也是在使用shopex公司的產品 呵呵:)
SHOPEX與ECSHOP是目前國內流行的兩款PHP網上商店系統。一個是老牌勁旅,一個是後起之秀,由此,很多網友都開始不由自主地將“SHOPEX”與“ECSHOP”之間進行比較。雖然“SHOPEX”發展多年功能已比較完善,而“ECSHOP”的橫空出世是否能夠搶佔使用者的眼球,積蓄實力以期能與“SHOPEX”一較高低呢?在下文中將通過各項功能比較來窺視“SHOPEX”與“ECSHOP”孰優孰劣。(備註:這裡的shopex指ShopEx網上商店系統)
相關軟體下載:
ShopEx網上商店系統v4.6
ECSHOPv2.1.2a
一、程式碼免費及開源
SHOPEX:ShopEx網上商店系統提供免費下載、免費使用、免費升級,沒有使用時間和功能上的任何限制,與商業版本一樣。但是SHOPEX是經過優化,後臺原始碼是加密的,前臺原始碼是開源的。
ECSHOP:ECSHOP則是一款開源免費的通用電子商務平臺構建軟體,使用者可以根據自己的商務特徵對ECSHOP進行定製,增加自己商城的特色功能。
點評:SHOPEX和ECSHOP同樣免費;前且的小信使、提醒工具、後臺生成靜態頁面的檔案都是經過加密處理的,只支援前臺開源,不利於使用者的修改和二次開發。而ECSHOP且完全支援開源,在這點上ECSHOP佔據了上方,我們也相信,在將來的某一天,SHOPEX也實現開源。
二、支付閘道器
SHOPEX:目前SHOPEX內建銀聯、快錢、支付寶等國際國內三十四個網上支付閘道器。無需另行製作閘道器介面,使用者自由選取合適的閘道器,快速實現網上線上支付功能。
SHOPEX內建支付閘道器
ECSHOP:以外掛方式提供對支付閘道器的支援,使用者可以自行選擇所需的支付方式。ECSHOP內建了銀聯、快錢、支付寶等國內較為常用的六個支付閘道器。
點評:SHOPEX和ECSHOP都會根據廣大使用者的需求提供更多的支付閘道器選擇。SHOPEX雖然提供了多種支付閘道器,但使用者如需要一些較為少用的閘道器,且必須通過向官方定製才行。ECSHOP則提供完整的支付外掛規範文件,便於使用者自行修改和擴充套件。
三、留言及會員整合
SHOPEX:SHOPEX不僅內建留言板,還提供了外接的留言本;系統提供了同cmsware和discuz!論壇的整合的功能模組,可以新增即時通訊包括QQ、MSN、淘寶旺旺、阿里巴巴貿易通和Skype五種,新增之後可以選擇顯示在頁面底部版權資訊處或者聯絡我們頁面。後臺整合了線上客服系統中基於WEB實現的一款免費網頁對話客服系統-53KF客服系統。
ECSHOP:ECSHOP同樣提供了內建留言板,ECSHOP採用外掛機制實現與論壇的無縫整合。目前已支援discuz,phpwind,phpbb,vbb,MolyX,BMForum,ipb等常用論壇。實現了會員資料的共享,無需重複登陸和註冊,並保留了論壇和商場獨立的登陸,註冊入口。
點評:SHOPEX只提供整合介面的技術文件,如果使用者需要其他論壇介面需要自己做。而ECSHOP則幾乎整合了目前常用的php論壇程式。
四、商品管理
SHOPEX:商品批量上傳和批量編輯,可以快速成批匯入商品資料,快捷方便的修改商品;組合商品功能,可以用於組配商品銷售和加價購買的方式以及商品捆綁促銷;非實體商品和數字商品的銷售功能(遊戲點卡、上網絡卡、軟體註冊碼、圖書),線上取卡、線上充值與卡資訊批量上傳。
ECSHOP:ECSHOP擁有完備新穎的商品管理功能,支援商品相簿,關聯商品,關聯文章,配件等。允許商品屬於多個商品分類,可後臺設定商品屬性,不同屬性可對應不同價格。使用外掛機制實現虛擬商品管理功能。目前提供虛擬卡外掛。該外掛實現了遊戲點卡、網絡卡等的線上取卡與卡資訊批量上傳等功能。提供對商品加標籤功能,便有使用者查詢和分類。
點評:單純以商品管理功能而論(不涉及BBS、儲存空間等附加服務),SHOPEX與ECSHOP非常類似,有些功能只是實現的方式不一樣,一時之間難分高下。
五:支援語言
SHOPEX:多種國際語言版本,可以輕鬆建立簡體中文、繁體中文和英文的網上商店,也可根據需要建立其他任意語言文字的網上商店。使用者可以設定後臺文字顯示的語言。
ECSHOP:可輕鬆實現多語言的轉換,實現語言包和程式的分離。目前提供簡體中文和繁體中文語言包。使用者也可根據需要翻譯和定製語言包。
點評:後臺可以用任意一種語言對前臺進行管理、錄入而沒有阻礙,大大方便了使用者的管理,在這點上,SHOPEX更加的符合廣大使用者的習慣。
六、模板設計
SHOPEX:強大的模板自由定製功能,內建多套模板,您可隨時更換調整,更可對每個模板進行個性化編輯,不再千人一面;ShopEx也可以為您量身定製個性化模板,ShopEx免費開放模板介面,您也可以自行設計、使用全新模板。
ECSHOP:對Dreamweaver模板機制提供完美支援。可使用Dreamweaver製作和檢視自己的模板。同時程式提供對模板顯示內容控制。如可以在頁面上靈活新增指定分類的商品,或指定品牌的商品等。可隨意調整廣告的顯示,而無需手動修改模板。
點評:對於一些初級使用者來說,現成的總比需要動手去做的好,在內建模板方面,ECSHOP要加把勁。
七、程式碼和執行效能(搜尋優化)
SHOPEX:在搜尋引擎優化方面,SHOPEX選擇了與點石互動合作,特別針對各大搜索引擎進行優化,有助於網店的搜尋引擎收錄;網站的META-tags和TITLE可自定義,方便進行搜尋引擎優化,更容易地被搜尋引擎收錄;軟體構架靈活,考慮未來功能擴充之需要,具有較強的可擴充套件性。
ECSHOP:整站對搜尋引擎有優秀的支援。每個頁面都為搜尋引擎提供豐富的資訊,有助於搜尋引擎的收錄。提供偽靜態頁面的支援,並對靜態連結地址進行優化。ECShop獨家支援兩種URL重寫方式,支援sitemaps0.9網站索引規範,能夠為站點被搜尋引擎的收錄做到最大限度的支援和幫助。強大的快取機制極大的提高了程式執行速度。
點評:在搜尋優化方面,兩家都做了很大的努力。相對ECSHOP來說,SHOPEX發展較早,程式穩定成熟,bug也比較少。
八、常規功能及其他
SHOPEX:網站LOGO、名稱、SMTP伺服器等引數管理,並且可以增加網站定製首頁的功能;提供了批發方案設定。客戶可以選擇商品的配送方式,比如快遞、EMS、火車託運、空運等等配送方式,系統自動計算相關配送價格。
ECSHOP:可通過後臺定製頁面顯示,網站LOGO。提供豐富的引數對網站進行定製。提供豐富的促銷管理功能,如紅包,贈品,奪寶奇兵,團購等貼心促銷功能。配送方式通過外掛提供,便於使用者自主選擇和擴充套件。能自動計算使用者配送費用。
點評:在引數設定和促銷功能方面,ECSHOP顯得比SHOPEX要豐富的多。對於這些功能是否有必要,則是“仁者見仁,智者見智”,在這裡不做過多評論。
總結
在以上的幾個回合的比較中,“ECSHOP”看似佔據了上方,但也非並表示它擁有絕對的優勢。從上文中可以看出“ECSHOP”亟待改進與增強之處也不少。
而且SHOPEX本身就是以功能全面、易用、強大見長;而ECSHOP這個“免費開源”和靈活的外掛機制取勝,兩者也有一定的差異。
“ECSHOP”作為後起之秀能否迅速崛起,也許還有更遠的路要走。就如一位使用者說的“我喜歡ECSHOP,但我用的是SHOPEX”。
======================================================================================
smarty模板引擎的入門
雖然網上關於這東西的教程已經多如牛毛,不過總是缺乏例項,而且文章都是抄來抄去的就那三兩個版本。所以我在這兒舉兩個例子再多講一次。
主流的PHP模板有smarty和phplib。
在這裡我介紹一下smarty模板,當作對初級phper的一個路引吧。
smarty是PHP官方出的模板,官網是http://smarty.php.net/。目前最新的版本是2.6.18.
對於PHP,我建議還在用PHP4的人馬上升級到PHP5,因為php4很快就要被官方放棄不再更新。用mysql資料庫的最好也別再用4.1以下版的。高版的資料庫開始支援更多的字符集,觸發器,儲存過程,複合查詢等特性。
言歸正傳。
smarty實際上也是些PHP程式。和你編寫的PHP程式沒什麼兩樣。只不過是一些封裝好的能實現模板功能的類。
用法:
一,把smarty的壓縮包下載下來後解壓到你的WEB目錄。
二,看看smarty目錄下的資料夾是否齊全。包含cache目錄(用來存放快取檔案),configs目錄(存放配置檔案),libs目錄(smarty主程式的所在),templates(存放你的模板的目錄),templates_c(被smarty編譯過的模板檔案存放路徑)。當然了,這些目錄不一定在這裡,你可以將它們放在任何你想放置的位置,只要在你寫的PHP程式中包含正確就行了。
三。在你的程式主包含進來主程式和配置資訊
<?php
require('./smarty/libs/Smarty.class.php'); //包含主程式
$smarty= new Smarty();
$smarty->template_dir = './template'; //模板目錄
$smarty->cache_dir ='./cache'; //快取的目錄
$smarty->compile_dir = './smarty/templates_c'; //編譯的目錄
$smarty->caching=false; //禁用快取,除錯程式的時候設為false,正常執行的時候可設為true
$smarty->left_delimiter='<{'; //設定你的模板中標籤的左,右分割符,如果沒有這兩行,程式將預設為{}這兩個符號,因為容易和模板中的javascript程式搞混,故一般為重設為<{}>,或者是{{}},當然你也可以改為任何你認為除了標籤外都不會用得上的符號。
$smarty->right_delimiter='}>';
?>
這樣,你的smarty就配好了。
怎麼和你的程式配合使用呢?還是舉個hello world的例子吧。
普通的PHP程式為: index.php
<?php
$str="hello world";?>
<html>
<head>
<title><?php echo ($str);?></title>
<body>
<?php echo ($str);?>
</body>
</html>
用上smarty後,需要有兩個檔案,一個是PHP程式,一個是模板。
PHP程式如下:index.php
<?php
require('./smarty/libs/Smarty.class.php');
$smarty= new Smarty();
$smarty->template_dir = './template';
$smarty->cache_dir ='./cache';
$smarty->compile_dir = './smarty/templates_c';
$smarty->caching=false;
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
$str="hello world";
$smarty->assign("info",$str); //把變數的值賦給模板中的標籤變數
$smarty->display("hello.html"); //使用hello.html這個模板。模板可用DW做,在排版上和做普通網頁沒什麼兩樣。模板在存放在上面你指定的模板目錄中去。預設的模板副檔名為tpl。其實叫什麼都無所謂。
?>
模板檔案hello.html
<html>
<head>
<title><{$info}></title>
</head>
<body>
<{$info}>
</body>
</html>
好了,執行一下試試吧。訪問index.php.
顯示結果是不是一樣呢?不瞭解的人可能會問了,這看起來好像很麻煩,程式碼多了許多。
這只是輸出一行,你試著輸出更多的資訊看看。
用smarty有什麼好處呢?
你試著把caching=false更改為true,開啟它的快取,儲存,再通過瀏覽器訪問一下index.php。然後更改程式中的輸出資訊hello world,比如ABCDEFG。再訪問一下它。你看到了什麼?沒錯!輸出的資訊依然是hello world。可是我訪問的明明是index.php啊,為什麼輸出的東西和我寫的程式不一樣呢?這就是它調了它快取的網頁。如果這些要輸出的資料是從資料庫中讀出來的,那麼開啟了快取後,只有程式第一次執行的時候,它會讀取資料庫,以後再有人訪問,程式就不再讀資料庫,而是從快取中取出資料輸出的客戶端,這將極大的降低資料庫的壓力。還可以使用$cache_lifetime來設定快取的有效時間(單位秒),來提高更新比較頻繁,例如論壇等的執行效率。
第二個好處,模板技術把MVC的開發思想引入了PHP。讓不同的開發角色在大中型專案中各司其職。一套程式寫成了,可以建成N個網站,只需要用Dreamweaver修改模板就可以,程式不需要進行任何改動。
怎麼樣?smarty用起來很簡單吧?
下面,再舉個稍複雜點結合資料庫輸出多條記錄的例子,看例子前很講一個標籤section
用法是 section(name=標籤名 loop=陣列變數)
這個標籤要閉合。例如
<{section name=str loop=$str}>
<{/section}>
PHP程式:
<?php
require('./smarty/libs/Smarty.class.php');
require('./config.php'); //包含你的資料庫連線配置檔案
$smarty= new Smarty();
$smarty->template_dir = './template';
$smarty->compile_dir = './template_c';
$smarty->cache_dir ='./cache';
$smarty->caching=false; //測試時禁用快取
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
$smarty->assign('page_title','新聞');
$query="select * from news order by id desc limit 0,10";
$db=mysql_query($query,$conn)
while ($rs = mysql_fetch_array($db)) {
$arr[]= array("id"=>$rs['id'], "title"=>$rs['title'],"date"=>$rs['date']);
$smarty->assign('news',$arr); //把陣列變數賦給模板的標籤變數
}
$smarty->display('index.html');
?>
模板index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><{$page_title}></title>
<link href="css/css.css" rel="stylesheet" type="text/css">
</head>
<body>
<div align="center">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="29"><table width="100%" height="29" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="28" align="left" valign="bottom"><img src="images/xw-1.gif" width="28" height="29"></td>
<td width="689" align="left" valign="middle" background="images/xw-bj.gif" class="font-1">動態新聞</td>
<td width="57" background="images/xw-bj.gif"><img src="images/xw-more.gif" width="30" height="11"></td>
<td width="6" align="right" valign="bottom"><img src="images/xw-2.gif" width="6" height="29"></td>
</tr>
</table></td>
</tr>
<tr>
<td class="bk-1"><table width="771" height="115" border="0">
<tr>
<td width="37" height="62"><div align="center"></div></td>
<td width="724" rowspan="2">
<table width="543" border="0">
<tr>
<td width="16"> </td>
<td width="390" align="left" valign="middle" class="font-2">標題</td>
<td width="123" align="left" valign="middle" class="font-2">日期</td>
</tr>
<{section name=news loop=$news}>
<tr>
<td align="left" valign="middle"><img src="images/xw-3.gif" width="8" height="8"></td>
<td height="22" align="left" valign="middle" background="images/xw-bj1.gif" class="font-2"><a href="./view.php?id=<{$news[news].id}>"><{$news[news].title}></a></td>
<td height="22" align="left" valign="middle" background="images/xw-bj1.gif" class="font-2"><{$news[news].date}></td>
</tr>
<{/section}>
</table>
</td>
</tr>
</table></td>
</tr>
</table>
</div>
</body>
</html>
==============================================================================
例4.模板控制(if / elseif / else/ endif )
=======================================================
example4.tpl
=======================================================
<html>
<head><title>模板中的流程控制</title><head>
<body>
<table border="1">
{assign var="tbColor" value="#D4D0C8"}
色彩:{$tbColor}<br>
{section name=loop loop=$News}
{if $tbColor == "#D4D0C8"}
<tr bgcolor="{$tbColor}">
{assign var="tbColor" value="#EEEEEE"}
{else $tbColor == "#EEEEEE"}
<tr bgcolor = "{$tbColor}">
{assign var="tbColor" value="#D4D0C8"}
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
<tr>
{/section}
</table>
</body>
</html>
=======================================================
example4.php
=======================================================
<?php
require_once ("./public/inc/F117_Smarty.php");
$smarty = new F117_Smarty;
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->config_dir = './configs/';
$smarty->cache_dir = './cache/';
$smarty->caching = false;
$array[]= array("newsID"=>"001", "newsTitle"=>"第1條新聞");
$array[]= array("newsID"=>"002", "newsTitle"=>"第2條新聞");
$array[]= array("newsID"=>"003", "newsTitle"=>"第3條新聞");
$array[]= array("newsID"=>"004", "newsTitle"=>"第4條新聞");
$array[]= array("newsID"=>"005", "newsTitle"=>"第5條新聞");
$array[]= array("newsID"=>"006", "newsTitle"=>"第6條新聞");
$array[]= array("newsID"=>"007", "newsTitle"=>"第7條新聞");
$array[]= array("newsID"=>"008", "newsTitle"=>"第8條新聞");
$smarty->assign("News", $array);
$smarty->display("example4.tpl");
?>
smarty例項教程(4)
==================================================
example4.php輸出:
==================================================
<html>
<head><title>模板中的流程控制</title><head>
<body>
<table border="1">
<tr bgcolor="#D4D0C8">
<td>001</td>
<td>第1條新聞</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>002</td>
<td>第2條新聞</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>003</td>
<td>第3條新聞</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>004</td>
<td>第4條新聞</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>005</td>
<td>第5條新聞</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>006</td>
<td>第6條新聞</td>
</tr>
<tr bgcolor="#D4D0C8">
<td>007</td>
<td>第7條新聞</td>
</tr>
<tr bgcolor = "#EEEEEE">
<td>008</td>
<td>第8條新聞</td>
</tr>
</table>
</body>
</html>
模板檔案中使用:
{if $tbColor == "#D4D0C8"}
<tr bgcolor="{$tbColor}">
{assign var="tbColor" value="#EEEEEE"}
{else $tbColor == "#EEEEEE"}
<tr bgcolor = "{$tbColor}">
{assign var="tbColor" value="#D4D0C8"}
{/if}
這一語句塊進行設定每一行的背景顏色, {assign var="tbColor" value="#D4D0C8"}還記的吧,是例3中設定模板內部變數的定義方法,
使用模板內建 的流程控制語句有時可以極大程度上提高程式的控制能力,下面一個例子是phpx.com中曾經有位朋友問過的,我將它作為
例項放在這裡供大家學習.
----------------------------------------------------------------------------------
例5: 使用模板內建流程控制語句進行一行多單元格內容輸出, 也就是在視覺上smarty每記輸出幾條記錄:
================================================
example5.tpl
================================================
<html>
<head><title>一行輸出多條記錄</title></head>
<body>
<table>
<tr>
{section name=loop loop=$News step=1}
{if $smarty.section.loop.index % 4 == 0}
</tr>
<tr>
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
{/section}
</tr>
</table>
</body>
</html>
====================================================
example5.php
====================================================
<?php
require_once ("./public/inc/F117_Smarty.php");
$smarty = new F117_Smarty;
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';
$smarty->config_dir = './configs/';
$smarty->cache_dir = './cache/';
$smarty->caching = false;
$array[]= array("newsID"=>"001", "newsTitle"=>"第1條新聞");
$array[]= array("newsID"=>"002", "newsTitle"=>"第2條新聞");
$array[]= array("newsID"=>"003", "newsTitle"=>"第3條新聞");
$array[]= array("newsID"=>"004", "newsTitle"=>"第4條新聞");
$array[]= array("newsID"=>"005", "newsTitle"=>"第5條新聞");
$array[]= array("newsID"=>"006", "newsTitle"=>"第6條新聞");
$array[]= array("newsID"=>"007", "newsTitle"=>"第7條新聞");
$array[]= array("newsID"=>"008", "newsTitle"=>"第8條新聞");
$smarty->assign("News", $array);
$smarty->display("example5.tpl");
?>
==================================================
example5.php輸出內容:
==================================================
<html>
<head><title>一行輸出多條記錄</title></head>
<body>
<table>
<tr>
</tr>
<tr>
<td>001</td>
<td>第1條新聞</td>
<td>002</td>
<td>第2條新聞</td>
<td>003</td>
<td>第3條新聞</td>
<td>004</td>
<td>第4條新聞</td>
</tr>
<tr>
<td>005</td>
<td>第5條新聞</td>
<td>006</td>
<td>第6條新聞</td>
<td>007</td>
<td>第7條新聞</td>
<td>008</td>
<td>第8條新聞</td>
</tr>
</table>
</body>
</html>
說明:本來還可以優化,使得第一行不輸出一個空行的<tr> </tr>,但是學習程式,簡單為好,先就這麼用了. 在這裡說明一下:
{section name=loop loop=$News step=1}
{if $smarty.section.loop.index % 4 == 0}
</tr>
<tr>
{/if}
<td>{$News[loop].newsID}</td>
<td>{$News[loop].newsTitle}</td>
{/section}
{section}{/section}指的是一個迴圈部分,在下一節會有詳細的介紹,我們主要來看看這一句:
{if $smarty.section.loop.index % 4 == 0}
$smarty.section.loop指出$smarty的例項中的section段有一個叫loop的部分, 它有一個屬性叫index, 它的表示當前迴圈的索引值,
從0開始遞增, 我們把它%4後與0相比較,也就是說,如果當前的索引值是4的倍數,它就輸出一個</tr><tr>,否則執行下面的部分,
很簡單的就解決了一個在程式上實現起來很麻煩的事情.