Smarty變量修飾器

2018-10-12 14:59 更新

變量修飾器可以用于變量, 自定義函數(shù)或者字符串。 使用修飾器,需要在變量的后面加上|(豎線)并且跟著修飾器名稱。 修飾器可能還會有附加的參數(shù)以便達到效果。 參數(shù)會跟著修飾器名稱,用:(冒號)分開。 同時,默認全部PHP函數(shù)都可以作為修飾器來使用 (不止下面的),而且修飾器可以被 聯(lián)合使用。

Example 5.1. 修飾器例子

{* apply modifier to a variable *}
{$title|upper}

{* modifier with parameters *}
{$title|truncate:40:"..."}

{* apply modifier to a function parameter *}
{html_table loop=$myvar|upper}

{* with parameters *}
{html_table loop=$myvar|truncate:40:"..."}

{* apply modifier to literal string *}
{"foobar"|upper}

{* using date_format to format the current date *}
{$smarty.now|date_format:"%Y/%m/%d"}

{* apply modifier to a custom function *}
{mailto|upper address="smarty@example.com"}

{* using  php's str_repeat *}
{"="|str_repeat:80}

{* php's count *}
{$myArray|@count}

{* this will uppercase and truncate the whole array *}
<select name="name_id">
{html_options output=$my_array|upper|truncate:20}
</select>

  

  • 修飾器可以作用于任何類型的變量,數(shù)組或者對象。

    溫馨提示:

    這是Smarty3的默認行為。在Smarty2.x,你需要在數(shù)組后加上"@" 標識來使用修飾器,如{$articleTitle|@count}。 在Smarty3,不再需要使用"@",它會被忽略。

    如果你想要在數(shù)組的每一項中都加上修飾器,你可以通過循環(huán)數(shù)組進行,或者可以 在修飾器函數(shù)中提供這個功能。

    溫馨提示:

    另外,在Smarty2.x,修飾器可以作用在數(shù)學表達式的結(jié)果上,如{8+2}, 意味著{8+2|count_characters}的結(jié)果是2, 因為8+2=10 而 10 是兩個字符長度。 在Smarty3,修飾器將會作用在變量上,或者是在表達式計算前,所以因為 2 是一個字符長度, 所以{8+2|count_characters}的結(jié)果是9. 如果希望出現(xiàn)原來的結(jié)果,可以使用括號,如{(8+2)|count_characters}。

  • 修飾器可以從$plugins_dir 目錄中自動加載,或者通過registerPlugin() 來進行動態(tài)注冊。 第二種方法在PHP代碼和smarty模板間共享函數(shù)時很有用。

  • 默認全部PHP函數(shù)都可以作為修飾器,正如上面例子演示的。 然而,使用php函數(shù)作為修飾器會存在兩個小問題:

    • 首先 - 有時函數(shù)參數(shù)的順序并不太一致。如使用 {"%2.f"|sprintf:$foo}來格式化$foo是正確的。 但是更直觀的做法,{$foo|string_format:"%2.f"}是Smarty自身的函數(shù)。

    • 其次 - 如果開啟了安全限制,那么要使用php函數(shù)作為修飾器,就必須通過$modifiers屬性來進行設(shè)置信任的函數(shù)。 參見安全機制的章節(jié)。

參見 registerPlugin(), 修飾器組合. 和 Smarty擴展

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號