位置:首頁 > 框架 > Smarty教學 > Smarty insert

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 函數卻不會被緩存,每次調用頁麵它們都會被動態加載,即使是在緩存頁麵中. 該特性可以廣泛應用於廣告條、投票、實時天氣預報、搜索結果、反饋信息等區域.