隨意混用 PHP 與其他 Web 頁面標記將導致程式邏輯、HTML、層疊樣式表(Cascading Style Sheets,CSS)和 JavaScript 處於混亂狀態,使維護成為一項艱巨的任務。Smarty 模板引擎可以將形式與功能分離。
PHP Web 應用程式易於上手。PHP 語言的文法整潔且易於掌握。可以將 PHP 與 HTML、JavaScript 和 CSS 直接混用以快速產生可視結果。而且,把 PHP 應用程式部署到您自己的 Web 服務器或託管服務中只是小菜一碟。
但是混用 PHP 與其他頁面標記也是一項責任。PHP 代碼通常是含有程式邏輯、結構化查詢語言 (SQL)(Structured Query Language,SQL)查詢、函數、類、開發人員注釋、HTML、CSS 樣式和指令碼的複雜 web(不是開玩笑)。更糟糕的是,把內容從 PHP、echo
發送到輸出緩衝區有很多種方法。維護這樣混亂的頁面十分費力。對代碼或標記做出無關緊要的更改會帶來嚴重破壞,並且增強頁面可能需要設計人員與程式員的共同努力。使用 PHP,形式(頁面的布局)及功能(頁面的目的和構造)將被混在一起。
在理想情況下,形式與功能是相互獨立的。例如,CSS 和 HTML 一定應該如此。CSS 是形式,而 HTML 是功能。在使用 PHP 的情況下,如果頁面標記和代碼能夠分離將是十分理想的。代碼將處理輸入,制定決策並產生顯示資料,而標記將期待獲得資料並提供所需的支架以渲染資訊。
例如,首頁的標記可能留下一個 “填空” (fill in the blank) 以供使用者登入,以及其他預留位置以供儲存使用者的映像和重要訊息。此模板 —— 這樣命名是因為它將提供頁面顯示的模式 —— 只面向設計人員,設計人員將控制頁面的整體外觀並留下名稱、圖片和其他資料的預留位置。代碼只是為預留位置提供資料。開發人員的任務仍然主要集中在計算上。
當然,形式與功能必須協作。如果模板期望獲得以美元為單位的金額,則代碼不應當提供 URL。如果模板期望獲得對象,則代碼不應當提供列表。因此,模板系統必須將表單與函數分離,但還必須在兩者之間建立聯絡。
最流行的 Web 應用程式程式設計語言(Perl、Python、Ruby、Java™)都有模板引擎,而 PHP 也不例外。在搜尋引擎中鍵入 PHP template engine
,然後您可能會找到 25 個以上的選項(有關強調所研究的每個引擎功能的列表 The PHP Template Engine Roundup,請參閱 參考資料)。
一些 PHP 模板引擎進行了速度最佳化。其他 PHP 模板引擎旨在鼓勵分離表單與函數的同時簡化使用。在某些包中,預留位置是在 PHP 本身中描述的,而其他解決方案都有一種自訂的簡短程式設計語言。如何選擇模板引擎在很大程度上取決於要求,因此適宜進行少量研究和實驗。
在這裡,我向您介紹 Smarty,它是最流行的 PHP 模板引擎之一。Smarty “代碼” 有它自己的文法和運算子擴充列表,但是系統並不難學。閱讀或瀏覽 Smarty 文檔,以便熟悉它的所有功能。從 Smarty 的小修改開始,根據需求擴充您的技能,然後越來越精通。
獲得 Smarty
Smarty Web 網站維護著一張活動郵件清單、一個支援論壇和一個 Internet Relay Chat (IRC) 論壇(請參閱 參考資料)。開發進行中,而本文基於 V2.6.18 版本,該版本發佈於 2007 年 3 月 7 日。
Smarty 有兩個方面:PHP API (API) 和顯示引擎。應用程式代碼將調用 API 把代碼變數與模板預留位置關聯起來,而顯示引擎將解釋 Smarty 標記、執行迴圈、引用預留位置和顯示最終結果。Smarty 功能包括:
<