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 | 插入函數(shù)的名稱 |
assign | string | No | n/a | 該屬性指定一個變量保存待插入函數(shù)輸出 |
script | string | No | n/a |
插入函數(shù)前需要先包含的php腳本名稱 |
[var ...] | [var type] | No | n/a | 傳遞給待插入函數(shù)的本地參數(shù) |
Insert 函數(shù)類似欲 inluce 函數(shù),不同之處是 insert 所包含的內(nèi)容不會被緩存,每次調(diào)用該模板都會重新執(zhí)行該函數(shù).
例如你在頁面上端使用一個帶有廣告條位置的模板,廣告條可以包含任何HTML、圖象、FLASH等混合信息. 因此這里不能使用一個靜態(tài)的鏈接,同時我們也不希望該廣告條被緩存. 這就需要在 insert 函數(shù)指定:#banner_location_id# 和 #site_id# 值(從配置文件中取),同時需要一個函數(shù)取廣告條的內(nèi)容信息.
例 7-10. insert 函數(shù)演示
|
在此例中,我們使用了 getBanner 作為 name 屬性,同時傳遞了 #banner_location_id# 和 #site_id# 兩個參數(shù). 接下來 Smarty 在你的 php 程序中搜索名為 insert_getBanner() 的函數(shù),#banner_location_id# 和 #site_id# 的值被組合成一個數(shù)組作為函數(shù)的第一個參數(shù)傳遞給該函數(shù). 為了避免函數(shù)命名混亂,所有的 insert 函數(shù)都必須以 insert_ 開頭. 你的 insert_getBanner() 函數(shù)根據(jù)傳遞的參數(shù)執(zhí)行并返回執(zhí)行的結果. 這些結果就顯示在模板中調(diào)用該函數(shù)的位置. 在此例中 Smarty 調(diào)用該函數(shù)類似insert_getBanner(array("lid"=>"12345","sid"=>67890"));并將返回的結果顯示在調(diào)用的位置.
如果設置了 assign 屬性,該屬性對應的變量名用于保存待包含函數(shù)的輸出,這樣待包含函數(shù)的輸出就不會直接顯示了.注意:賦給模板變量的輸出信息在緩存的時候同樣無效.
如果指定了 script 屬性,在調(diào)用函數(shù)并執(zhí)行前將先包含(只包含一次)script指定的 php 腳本. 這是為了防止被調(diào)用的函數(shù)不存在,先調(diào)用包含該函數(shù)的 php 腳本將避免該情況.
Smart 對象作為函數(shù)的第二個參數(shù)被傳遞,在待包含函數(shù)中可以通過 $this 訪問并修改 smarty 對象信息.
技術要點: 使模板的一部分不被緩存. 如果打開了緩存, insert 函數(shù)卻不會被緩存,每次調(diào)用頁面它們都會被動態(tài)加載,即使是在緩存頁面中. 該特性可以廣泛應用于廣告條、投票、實時天氣預報、搜索結果、反饋信息等區(qū)域.