| Smarty2和Smarty3在實現上差不多,但是在smarty2升級到smarty3的時候還是要注意些許不同。 下面是已知的和smarty2不兼容的地方 ? == 語法 == Smarty 3 API有些方面進行了更新。一些Smarty 2 API調用需要更新以便符合Smarty 3。你可能會得到提示,推薦你使用新的語法??梢圆榭碨marty 3附帶的 README 文件獲得更多信息。 } 語法總是讓人迷惑,加上@符號說明修飾符作用于數組而不是作用于數組的每個元素。通常你總是想讓這個修飾符作用于這個變量而不必考慮它的類型。在 Smarty 3中,{$array|mod} 和?} 是等同的。去掉@符號,修飾符仍然作用于數組。如果你想修飾符作用于數據元素,你必須在模板中循環數組,或者使用自定義修飾符以支持數組遍歷。 大多smrty函數已經在需要的地方例如{html_options}進行了轉義。 ? == PHP版本 == Smarty 3 僅支持PHP 5. 在PHP 4將不能正常工作。 ? == {php} 標記 == Smarty 3 默認關閉 {php} 標記支持,不推薦使用。你可以通過設置$smarty->allow_php_tag=true來啟用。 {php} 塊中的變量不再與同一頁中的其它{php}塊共享作用域,因此在使用的時候要注意。 ? == 定界符和空格 == Smarty 定界符 {} 有空格包圍是不再認為是Smarty標記。因此,{ foo } 將被Smarty忽略,但是 {foo} 將被識別。這個變化使得 Javascript/CSS更容易在smarty中使用,而沒有必要使用 {literal}. 這個特性可以通過設置 $smarty->auto_literal = false; 禁用。 ? == 未用引號的字符串 == Smarty 2 對于參數中未用引號括起來的字符串有點寬容(并且模棱兩可)。Smarty 3 比較嚴格。對于不包含特殊字符(A-Za-z0-9_之外的字符)的字符串仍然可以不用引號括起來。 比如下面例子中文件名就必須用引號括起來。 ? view plain {assign?var=foo?value=baz}?<--?works?ok??{include?file="path/foo.tpl"}?<--?needs?quotes!?? ? == 擴展Smarty類 == Smarty 3 遵循PHP5標準構造規則。擴展Smarty類的時候,使用 __construct() 作為類的構造函數的名稱。如果你實現自己的構造函數,一定要先調用 parent::__construct() ? view plain class?MySmarty?extends?Smarty?{??function?__construct()?{??parent::__construct();??//?your?initialization?code?goes?here??}??}?? ? ? == 自動加載器 == Smarty 用spl_autoload_register函數 實現了它自己的自動加載器。如果想在自己的應用中使用自動加載器,就必須使用此方法注冊。 使用 __autoload() 將失敗。 這是PHP5標準自動加載函數??梢圆榭?br />http://us3.php.net/manual/en/function.spl-autoload-register.php == 插件文件名 == 自從Smarty 3使用默認的spl自動加載器,就要求插件文件名使用小寫字母。Smarty 2 允許使用大小寫混合插件名,你必須重命名以用于smarty 3. ? == Smarty特殊變量作用域 == 在Smarty 2中Smarty特殊變量 $smarty.section.* and $smarty.foreach.* 擁有全局作用域。如果子模板中含有同名的循環,就會覆蓋父模板中的值。 在Smarty 3中這些特殊變量將只作用于定義循環所在的模板。若是需要在子模板中使用,就不得不使用參數傳遞。 <source lang="smarty"> {include file="path/foo.tpl" index=$smarty.section.foo.index} </source> == SMARTY_RESOURCE_CHAR_SET == Smarty 3 設置常量 SMARTY_RESOURCE_CHAR_SET 為 utf-8作為模版文件的默認字符集.? 只是作為像 escape 等函數的默認字符集. 如果你的模板使用其它字符集, 就必須自己定義這個常量. == trigger_error() API 函數 trigger_error() 已被移除。 ? == Smarty 常量 == 下面這些常量? SMARTY_PHP_PASSTHRU SMARTY_PHP_QUOTE SMARTY_PHP_REMOVE SMARTY_PHP_ALLOW 已被類常量替代 Smarty::PHP_PASSTHRU Smarty::PHP_QUOTE Smarty::PHP_REMOVE Smarty::PHP_ALLOW ? |