smarty的默認標記符是大括號:{},
假如我們頁面上有JS且定義了函數或者對象,或者有CSS定義了樣式,就會出現大括號,
smary引擎就會把這些大括號當作smarty語法來解釋,
很明顯,這些CSS樣式屬性和JS里的語法,不是smarty的語法,
smarty引擎就會報錯。
解決辦法一、修改smart默認定界符,在php中,修改smarty對象的$left_delimiter和$right_delimiter屬性。
很多人喜歡改為<{和}>,也有人改為<!--{和}-->,這看個人喜歡了。
$smarty = new Smarty();
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
這樣,就能很好地避免了沖突問題,但是缺點也很明顯,
通用性和可讀性。
你習慣了用<{,他習慣用<!--{,還可能有人習慣用{{;
如果帶有<和>,想想在HTML標簽里面需要使用的情況
<input type="checkbox" <!--{if $checked}--> checked=""<!--{/if}--> />
大家可以把這句放到DW里看看效果。

個人不是很贊同改定界符來解決這個沖突問題。
作為smarty的開發者,他們肯定懂HTML、CSS、JS的,他們肯定知道這個大括號會有沖突的,
所以,smarty本身肯定會有解決辦的,那就是{literal}和{/literal}
將不想被smarty解釋的HTML用{literal}和{/literal}包起來。
{literal}
<script type="text/javascript">
function myFun(){
}
</script>
{/literal}
如果我們需要將php變量傳遞給js,可以這樣
<script type="text/javascript">
var chk = "{$checked}";
{literal}
function myFun(){
}
{/literal}
</script>
{literal}和{/literal}使用的位置,不需要強求在HTML里的“配對位置”,即可以這樣:
<header>
<script type="text/javascript">
var chk = "{$checked}";
{literal}
function myFun(){
}
</script>
</header>
<body>
{/literal}