Smarty變量修飾器

2018-10-12 14:59 更新

變量修飾器可以用于變量, 自定義函數(shù)或者字符串。 使用修飾器,需要在變量的后面加上|(豎線)并且跟著修飾器名稱。 修飾器可能還會(huì)有附加的參數(shù)以便達(dá)到效果。 參數(shù)會(huì)跟著修飾器名稱,用:(冒號(hào))分開。 同時(shí),默認(rèn)全部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ù)組或者對(duì)象。

    溫馨提示:

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

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

    溫馨提示:

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

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

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)