Smarty 的修飾符(Modifiers)能對模板變數、自訂函數回傳值或字串進行格式化、轉換、過濾等操作,語法為 |modifier,多個參數以 : 分隔,可鏈式組合使用。本文整理官方文件核心修飾符,附帶實戰範例,方便開發快速查閱。
| 分類 | 修飾符 | 說明 |
|---|---|---|
| 大小寫轉換 | capitalize | 首字母大寫 |
| lower | 全字串轉小寫 | |
| upper | 全字串轉大寫 | |
| string_format | 格式化字串(sprintf 語法) | |
| 字串長度/計數 | count_characters | 計算字元數(含空白) |
| count_words | 計算單字數 | |
| count_sentences | 計算句子數 | |
| count_paragraphs | 計算段落數 | |
| wordwrap | 依指定寬度換行 | |
| 字串擷取/替換 | truncate | 截取指定長度,支援尾碼與單字邊界 |
| replace | 簡單搜尋替換 | |
| regex_replace | 正則表達式替換 | |
| spacify | 字元間插入指定字串 | |
| strip | 移除多餘空白/換行/Tab | |
| strip_tags | 移除 HTML 標籤 | |
| 編碼/轉義 | escape | HTML/URL/JS/十六進制等轉義 |
| nl2br | 換行符轉 <br /> | |
| indent | 每行縮排 | |
| cat | 字串連接 | |
| 日期/預設值 | date_format | 格式化時間戳(strftime 語法) |
| default | 變數為空時給預設值 |
{* PHP: $smarty->assign('yesterday', strtotime('-1 day')); *}
{$smarty.now|date_format} {* Feb 6, 2001 *}
{$smarty.now|date_format:"%A, %B %e, %Y"} {* Tuesday, February 6, 2001 *}
{$smarty.now|date_format:"%H:%M:%S"} {* 14:33:00 *}
{$yesterday|date_format:"%A, %B %e, %Y"} {* Monday, February 5, 2001 *}
{$articleTitle|truncate:30:"..."} {* 截取 30 字元,超出加 ... *}
{$articleTitle|truncate:30:"":true} {* 強制在 30 字元處截斷 *}
{$articleTitle|lower|spacify|truncate:30:". . ."} {* 鏈式:小寫→插空→截取 *}
{$var|escape} {* 預設 html 轉義 *}
{$var|escape:"htmlall"} {* 轉義所有 HTML 實體 *}
{$var|escape:"url"} {* URL 編碼 *}
{$var|escape:"javascript"} {* JS 字串轉義 *}
{$email|escape:'hexentity'}
{$title|default:"無標題"} {* 變數空值時顯示預設字串 *}
{$user.nickname|default:$user.name} {* 也可用變數作預設值 *}
plugins/modifier.名稱.php,函數名 smarty_modifier_名稱,即可在模板直接使用 |名稱。|lower|spacify|truncate:30 依序執行,先轉小寫、再插空、最後截取。{$arr.key|modifier}、{$obj->method|modifier}。truncate 按位元組截取,中文 UTF-8 佔 3 位元組易截半個字導致亂碼。請使用 smartTruncate 或 mb_substr 封裝的自訂修飾符。strtotime 可解析的字串,不支援 MySQL DATETIME 字串直接格式化,需先轉時間戳。