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

Smarty 模板引擎 6 個實用技巧:capture、config_load、php、strip、fetch、常量

     編輯:PHP 相關知識

技巧一:{capture} 捕獲模板輸出

將模板片段輸出捕獲到變量,避免重複渲染、實現內容復用。

{capture name="header"}
    <header>
        <h1>{$site_title}</h1>
        <nav>...</nav>
    </header>
{/capture}

<div class="layout">
    {$smarty.capture.header}
    <main>{$content}</main>
    {$smarty.capture.header} {* 復用 *}
</div>
  • 未指定 name 時默認為 default
  • 讀取:{$smarty.capture.name}
  • 類似 jQuery .clone(),但僅捕獲輸出文本

技巧二:{config_load} 載入配置文件

直接在模板載入 .conf / .ini 配置,省去 PHP assign() 步驟。

配置文件 configs/site.conf

pageTitle = "配置加載測試"
bodyBgColor = "#f5f5f5"
logo = "logo.png"
width = 120
height = 60

模板調用

{config_load file="site.conf"}
<html>
<head><title>{#pageTitle#}</title></head>
<body bgcolor="{#bodyBgColor#}">
    <img src="{#logo#}" width="{#width#}" height="{#height#}">
</body>
</html>

注意:配置文件需放在 Smarty 設定的 $config_dir 目錄(默認 ./configs/),變量用 {#var#} 訪問。

技巧三:{php} 嵌入原生 PHP(慎用)

特殊業務需求下在模板執行 PHP 代碼,強烈不推薦常規使用,破壞模板分離原則。

{php}
global $db;
$rows = $db->query("SELECT * FROM notices LIMIT 5");
foreach ($rows as $row) {
    echo "<div class='notice'>{$row['title']}</div>";
}
{/php}

替代方案:控制器預處理數據 assign('notices', $notices),模板用 {foreach} 渲染。

技巧四:{strip} 壓縮 HTML 輸出

移除標籤間的空白字符(換行、縮進、多餘空格),減小傳輸體積、加快傳輸。

{strip}
<div class="card">
    <h3>標題</h3>
    <p>內容內容內容</p>
</div>
{/strip}
{* 輸出:

標題

內容內容內容

*}
  • 不影響 <pre>、<textarea> 等標籤內容
  • 生產環境建議開啟,調試時可關閉
  • 配合 $smarty->compile_check = false 可進一步提升性能

技巧五:{fetch} 讀取文件內容

類似 file_get_contents(),可將文件內容讀取到模板變量。

{fetch file="./data/announcement.txt" assign="announce"}
{if is_array($announce)}
    <b>數組格式</b>
{else}
    <div class="announce">{$announce}</div>
{/if}
  • assign 指定賦值變量名,省略則直接輸出
  • 文件路徑相對於 PHP 執行腳本目錄
  • 慎用:涉及 I/O,高併發下影響性能

技巧六:直接使用 PHP 常量

{* 定義在 PHP 中:define('APP_VER', '2.1.0'); *}
版本:{$smarty.const.APP_VER}

{* 系統常量 *}
PHP版本:{$smarty.const.PHP_VERSION}
文件路徑:{$smarty.const.__FILE__}

無需 assign(),模板直接訪問所有已定義常量。

總結對比

技巧核心用途推薦指數注意事項
capture片段復用、延遲輸出⭐⭐⭐⭐⭐避免過度嵌套
config_load配置分離、多語言⭐⭐⭐⭐配置文件路徑配置
php極特殊業務邏輯⭐破壞分層,慎用
stripHTML壓縮、傳輸優化⭐⭐⭐⭐⭐生產環境推薦開啟
fetch靜態文件內嵌⭐⭐I/O性能影響
常量訪問版本號、配置常量展示⭐⭐⭐僅讀、無邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved