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

Smarty 模板局部緩存:dynamic 標簽實現頁面片段動態化

     編輯:PHP 相關知識

Smarty 開啟整頁緩存後,若需部分區塊保持動態(如實時時間、用戶狀態、購物車數量),可註冊 dynamic 區塊標簽,實現「頁面靜態化、區塊動態化」。

核心原理

  • 首次執行編譯輸出並保存到 cache/
  • 後續請求檢測緩存是否過期(文件修改時間)
  • dynamic 區塊內容每次請求重新執行,不讀取緩存

PHP 註冊 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 區塊不支援嵌套
  • 區塊內不可包含其他 Smarty 標簽邏輯,僅輸出變量/函數結果
  • 緩存過期判斷基於模板文件修改時間,非內容變更
  • 大量 dynamic 區塊會降低緩存效果,權衡使用

進階:傳參給 dynamic 區塊

{dynamic user_id=$user.id}
用戶 {$user_id} 專屬推薦:{get_recommendations user_id=$user_id}
{/dynamic}

處理器函數接收 $params 陣列。

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