Smarty insert

insert

Attribute Name

Type

Required

Default

描述

name

string

Yes

n/a

The name of the insert function (insert_name)

assign

string

No

n/a

The name of the template variable the output will be assigned to

script

string

No

n/a

The name of the php script that is included before the insert function is called

[var ...]

[var type]

No

n/a

variable to pass to insert function

屬性

類型

是否必須

缺省值

描述

name

string

Yes

n/a

插入函數的名稱

assign

string

No

n/a

該屬性指定一個變量保存待插入函數輸出

script

string

No

n/a

插入函數前需要先包含的php腳本名稱

[var ...]

[var type]

No

n/a

傳遞給待插入函數的本地參數

Insert 函數類似欲 inluce 函數,不同之處是 insert 所包含的內容不會被緩存,每次調用該模板都會重新執行該函數.

例如你在頁面上端使用一個帶有廣告條位置的模板,廣告條可以包含任何HTML、圖象、FLASH等混合信息. 因此這裏不能使用一個靜態的鏈接,同時我們也不希望該廣告條被緩存. 這就需要在 insert 函數指定:#banner_location_id# 和 #site_id# 值(從配置文件中取),同時需要一個函數取廣告條的內容信息.

例 7-10. insert 函數演示

{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}

在此例中,我們使用了 getBanner 作爲 name 屬性,同時傳遞了 #banner_location_id# 和 #site_id# 兩個參數. 接下來 Smarty 在你的 php 程序中搜索名爲 insert_getBanner() 的函數,#banner_location_id# 和 #site_id# 的值被組合成一個數組作爲函數的第一個參數傳遞給該函數. 爲了避免函數命名混亂,所有的 insert 函數都必須以 insert_ 開頭. 你的 insert_getBanner() 函數根據傳遞的參數執行並返回執行的結果. 這些結果就顯示在模板中調用該函數的位置. 在此例中 Smarty 調用該函數類似insert_getBanner(array("lid"=>"12345","sid"=>67890"));並將返回的結果顯示在調用的位置.

如果設置了 assign 屬性,該屬性對應的變量名用於保存待包含函數的輸出,這樣待包含函數的輸出就不會直接顯示了.注意:賦給模板變量的輸出信息在緩存的時候同樣無效.

如果指定了 script 屬性,在調用函數並執行前將先包含(只包含一次)script指定的 php 腳本. 這是爲了防止被調用的函數不存在,先調用包含該函數的 php 腳本將避免該情況.

Smart 對象作爲函數的第二個參數被傳遞,在待包含函數中可以通過 $this 訪問並修改 smarty 對象信息.

技術要點: 使模板的一部分不被緩存. 如果打開了緩存, insert 函數卻不會被緩存,每次調用頁面它們都會被動態加載,即使是在緩存頁面中. 該特性可以廣泛應用於廣告條、投票、實時天氣預報、搜索結果、反饋信息等區域.