模板中嵌入 JavaScript/CSS 時,大括號 {} 與 Smarty 分隔符衝突,需用逃逸機制處理。
<script language="javascript" type="text/javascript">
function myfunction(){ldelim}
alert("aaaaaa");
{rdelim}
</script>
<a href="#" onclick="javascript:myfunction()">aaaa</a>
{ldelim} → {,{rdelim} → }。適合少量大括號場景。
<script language="javascript" type="text/javascript">
{literal}
function myfunction(){
alert("aaaaaa");
}
{/literal}
</script>
<a href="#" onclick="javascript:myfunction()">aaaa</a>
區塊內容**完全按原樣輸出**,Smarty 不做任何解析。適合大段 JS/CSS/JSON 內嵌。
| 場景 | 推薦方案 | 理由 |
|---|---|---|
| 內嵌完整 JS/CSS 檔案 | {literal} | 一次性逃逸全區塊,維護性最佳 |
| 模板中少量動態 JS 參數 | {ldelim}/{rdelim} | 保留模板變數插值能力 |
| JSON 資料內嵌 | {literal} | 避免雙引號、冒號被誤解析 |
{literal} 區塊中插入模板變數,可拆分區塊:{literal}...{/literal}{$var}{literal}...{/literal}$smarty->left_delimiter = '{{',從根源避開衝突