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