|cat: 是 Smarty 內建最簡潔的字串串接方式,語法:
{$var1|cat:$var2|cat:$var3}
{foreach item=i from=$abc}
{foreach item=j from=$def}
<img src="{$i.floder|cat:'130_'|cat:$j.picname}" />
{/foreach}
{/foreach}
解析:
$i.floder 如 upload/|cat:'130_' 接上固定字串 → upload/130_|cat:$j.picname 再接檔名 → upload/130_photo.jpg{assign var=imgPath value=$i.floder}
{assign var=imgPath value=$imgPath|cat:'130_'}
{assign var=imgPath value=$imgPath|cat:$j.picname}
<img src="{$imgPath}" />
缺點:語句冗長、變數污染作用域、可讀性差。
{$prefix|cat:$id|cat:'_'|cat:$suffix|cat:'.jpg'}
{$name|lower|cat:'_'|cat:$id|cat:'@example.com'}
{$baseUrl|cat:($useSsl ? 's' : '')|cat:'://example.com'}
| 場景 | 建議做法 |
|---|---|
| 需在多處重用串接結果 | {assign var=fullPath value=$a|cat:$b} 後重複使用 {$fullPath} |
| 串接邏輯極其複雜(含判斷、迴圈) | PHP 端預處理完成再傳入模板 |
| 需對串接結果進行進一步運算 | assign 存入變數再操作 |
|cat::單一表達式、無副作用、編譯後為單一 PHP 串接操作|cat: 串連時,考慮 PHP 端 implode() 或 sprintf() 預處理|cat:'_fixed_' 而非雙引號,避免不必要的變數解析|cat: 直接轉為 PHP . 運算子,零額外開銷{* 錯誤:管道符前後有空格 *}
{$a |cat: $b} {* 輸出字面文字 *}
{$a|cat :$b} {* 語法錯誤 *}
{* 正確 *}
{$a|cat:$b}
{$a|cat:'_'|cat:$b}