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 函式卻不會被快取,每次呼叫頁面它們都會被動態載入,即使是在快取頁面中. 該特性可以廣泛應用於廣告條、投票、實時天氣預報、搜尋結果、反餽資訊等區域.