Smarty 作為經典 PHP 模板引擎,透過插件機制與編譯緩存特性,可大幅擴展功能。本文示範如何開發分頁插件、實現靜態頁緩存,並解析 Smarty 核心優勢。
function.page.php將插件放入 plugins/ 目錄,模板中即可使用 {page row=10 now=5 href="..." first="首頁" prev="上一頁" next="下一頁" last="尾頁"} 語法。
row 總筆數、now 當前頁、page 每頁顯示頁碼數、href 連結格式利用 cache_lifetime = -1(永不過期)搭配 fetch() 將編譯後的輸出寫入緩存目錄,再取得緩存檔名,即為靜態 HTML 檔案。
class template extends Smarty {
function name($tpl_file, $cache_id=null, $compile_id=null) {
// 取得緩存檔案名稱(不含路徑)
return basename($this->_get_auto_filename($this->cache_dir, $tpl_file,
$this->_get_auto_id($cache_id, $compile_id)));
}
}
$Smarty = new template;
$file_name = $Smarty->name('plugins.html', 'cache_name');
$Smarty->cache_lifetime = -1;
$Smarty->fetch('plugins.html', 'cache_name'); // 生成靜態檔
| 特性 | 說明 |
|---|---|
| 模板編譯 | 模板編譯為 PHP 腳本,僅首次解析,後續直接執行,極快 |
| 智能重編譯 | 僅重新編譯變更過的模板檔案 |
| 自訂函數/修飾器 | 模板語言高度可擴展 |
| 內建緩存 | 支援多種緩存處理函數 |
| 插件架構 | 功能模組化,易於維護擴展 |
現代專案多改用 Twig、Blade 或前端框架 SSR,但 Smarty 的「編譯緩存」設計思想仍值得借鑑。