首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Smarty 模板引擎實用筆記:變數、快取與進階技巧

     編輯:PHP 相關知識

Smarty 模板引擎實用筆記:變數、快取與進階技巧

專案中長期使用 Smarty,卻常只用到 assign、display、foreach、if/else 等基礎功能。趁閒暇重新研讀文檔,整理出實務上高頻使用的進階特性,供日後查閱。

系統保留變數

模板中可直接存取 PHP 超全域變數:

  • {$smarty.get.id} → $_GET['id']
  • {$smarty.post}、{$smarty.session}、{$smarty.cookie}、{$smarty.server} 同理

在模板中使用 PHP 常數

// PHP 端
define('HEIGHT', 8846);
// 模板端
{$smarty.const.HEIGHT}

讀取外部設定檔

  1. 設定 $smarty->config_dir = "./conf";
  2. 建立 .conf 檔,格式:key1=val1
  3. 模板載入:{config_load file='site.conf'}
  4. 取值:{$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}
  • PHP 端賦值時:$smarty->assign('var', $val, true);(第 3 參數設 true)
  • {insert} 標籤(較少用)

變數調節器(Modifier)

修飾輸出格式,如日期格式化。亦可自訂調節器(放置於 plugins/ 目錄),專案中已實際應用,細節日後補充。

取得 Smarty

個人觀點:Smarty 快取在現代架構中可由 Redis/Memcached 取代,但理解其機制仍有助於維護舊專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved