Smarty 開啟整頁緩存後,若需部分區塊保持動態(如實時時間、用戶狀態、購物車數量),可註冊 dynamic 區塊標簽,實現「頁面靜態化、區塊動態化」。
cache/dynamic 區塊內容每次請求重新執行,不讀取緩存require 'Smarty.class.php';
$smarty = new Smarty();
$smarty->caching = true; // 開啟緩存
// 註冊 dynamic 區塊處理器
function smarty_block_dynamic($params, $content, &$smarty) {
return $content; // 直接返回內容,不緩存
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
page created: {$smarty.now|date_format:"%H:%M:%S"}
{dynamic}
now is: {$smarty.now|date_format:"%H:%M:%S"}
... do other dynamic stuff ...
{/dynamic}
page created: 14:30:00
{dynamic}
now is: 14:30:05
... do other dynamic stuff ...
{/dynamic}
| 場景 | 建議 |
|---|---|
| 用戶個性化信息 | {dynamic} 包裹用戶面板 |
| 實時數據(股價、倒計時) | {dynamic} 包裹數據區塊 |
| 購物車/收藏數量 | {dynamic} 獨立渲染 |
| CSRF Token | {dynamic} 每次生成新 Token |
| 廣告輪播 | {dynamic} 載入廣告邏輯 |
dynamic 區塊不支援嵌套{dynamic user_id=$user.id}
用戶 {$user_id} 專屬推薦:{get_recommendations user_id=$user_id}
{/dynamic}
處理器函數接收 $params 陣列。