專案中長期使用 Smarty,卻常只用到 assign、display、foreach、if/else 等基礎功能。趁閒暇重新研讀文檔,整理出實務上高頻使用的進階特性,供日後查閱。
模板中可直接存取 PHP 超全域變數:
{$smarty.get.id} → $_GET['id']{$smarty.post}、{$smarty.session}、{$smarty.cookie}、{$smarty.server} 同理// PHP 端
define('HEIGHT', 8846);
// 模板端
{$smarty.const.HEIGHT}
$smarty->config_dir = "./conf";.conf 檔,格式:key1=val1{config_load file='site.conf'}{$smarty.config.site} 或 {#site#}$smarty->caching = true; // 開啟快取
$smarty->cache_lifetime = 3600; // 快取壽命(秒)
$smarty->cache_dir = './cache'; // 快取目錄
// 判斷是否已有快取(Smarty 3 寫法)
if (!$smarty->isCached('news.html')) {
// 執行耗時查詢、賦值...
}
$smarty->display('news.html');
$id = empty($_GET['id']) ? 1 : $_GET['id'];
$smarty->assign('good_name', "good_name_$id");
// 第 2 參數為 cache_id,依 id 產生不同快取
$smarty->display('tpm.html', $id);
實務上 cache_id 常由 page、category 等參數經 md5 或自定演算法產生(如 ECShop 做法)。
$smarty->clearCache('tpl_name'); // 清除特定模板快取
$smarty->clearAllCache(); // 清除所有快取
{$time|date_format:"%Y-%m-%d %H:%M:%S" nocache}{nocache}{/nocache}$smarty->assign('var', $val, true);(第 3 參數設 true){insert} 標籤(較少用)修飾輸出格式,如日期格式化。亦可自訂調節器(放置於 plugins/ 目錄),專案中已實際應用,細節日後補充。
composer require smarty/smarty(推薦)個人觀點:Smarty 快取在現代架構中可由 Redis/Memcached 取代,但理解其機制仍有助於維護舊專案。