1. 程式人生 > 實用技巧 >Smarty 模板中的變數調解器

Smarty 模板中的變數調解器

變數調解器也叫作變數修改器。在模板中的變數都是直接輸出的,但是在變數輸出前有必要先修改一下。比如將資料表用二維陣列的行駛分配到模板中,如果表中有某個欄位使用時間戳來替代時間型別,就需要在模板中輸出這個變數前,修改為使用者可以讀懂的“年-月-日 時:分:秒”的格式。如果把這樣的處理過程放到 PHP 指令碼中完成,就成為了固定的資料格式,美工在設計模板的時候,就不能根據自己的想法在模板中靈活修改變數內容。當然,在Smarty 3.0中,也可以直接在模板中呼叫 PHP 函式修改模板中的變數,但是讓美工去使用 PHP 函式的情況還是應當儘量避免。所以在模板中使用變數調解器函式,在變數輸出前進行一些處理還是比較穩妥的。在Smarty 中,系統已經內建了一些常用的變數調解器函式,也可以通過Smarty 外掛機制自己擴充套件一些變數調解器函式但是使用方式都是一樣的。和在PHP中呼叫處理函式檔案相似,只是語法格式不盡相同。變數在模板中輸出以前如果需要調節,可以在這個變數後面跟一條豎線“|”,然後在後面使用調解命令(呼叫函式外掛)。而且對於相同一個變數,可以使用多個修改器,它們將從左到右按照設定好的順序被一次組合使用,使用時必須要用“|”字元作為它們之間的翻個符號。語法如下:

{$var|modifier:“args2”:...}                 {* 在模板中的變數後使用修改器 modigier 及引數 *}
{$var|modifier1|modifier2|modifier3|...}     {* 在模板中的變數後使用多個調解器組合使用的語法 *}

  另外,變數調解器由賦予的引數值決定其行為,引數由冒號“:”分開。所有的調解器命令有多個引數,但是調解其中的第一個引數必須是變數本身。使用變數調解器的命令和呼叫 PHP 函式有些相似,其實每個調解器命令都對應一個PHP函式。對比介紹如下:

{$var|modifier:"args1":"args2"}   {*在模板中使用調解器命令 modifier 格式,引數為 "args1"和"args2" *}對比
modifier($var,"args1":"args2")   //呼叫 PHP 中函式 modifier 格式,引數為 $var,"args1","args2" 

  倘若對同一個變數同時使用了多個調解器,也和在 PHP 中同時呼叫多個函式巢狀處理一個變數相似。在下面的示例中使用Smarty 內建的變數調解器命令 truncate ,將變數字串擷取為指定數量的字元:

{$topic|truncate:40:"..."}         {* 擷取變數值的字串長度為40,並在結尾使用“...” 表示省略 *}

  truncate 函式預設擷取字串動產航都為80個字元,但是可以通過提供的第一個可以選擇的引數來改變擷取的長度,比如上例中指定擷取長尾是40個字元。還可以指定一個字串作為第二個可選引數的值,追加到擷取最後的字串後面,如省略號(...)。除此之外,還可以通過第三個可選引數指定的字元限制後立即擷取,或者是還需要考慮單詞的邊界,這個引數預設為 FALSE 值,則擷取到達限制後的單詞邊界。在Smarty 2.0中只按 ASCII 碼進行擷取,並沒有考慮雙位元組和多位元組的字符集問題,所以擷取中文會出現亂碼。但是在Smarty 3.0中彌補了這個缺陷,可以正常擷取中文字元。