{insert}标记非常象{include}标记,只是{insert}标记是不被缓存的,即使模板的缓存是打开的。它们在每次激活模板时运行。
属性名 | 类型 | 必需? | 缺省 | 描述 |
---|---|---|---|---|
name | string | Yes | n/a | insert函数的名称(insert_name) |
assign | string | No | n/a | 输出将赋值的模板变量名 |
script | string | No | n/a | 在insert函数调用前需要包含的PHP脚本文件名 |
[var ...] | [var type] | No | n/a | 传递给insert函数的变量 |
假定说有一个模板,在页面顶端是一个横幅的位置。横幅可以包含任意的HTML,图形,FLASH的内容,因此我们不可能在这里使用一个静态的连接,我们也不希望该内容和页面一样被缓存。这里就用得到{insert}标记:模板需要知道#banner_location_id#和#site_id#值(从配置文件中得到),并需要调用一个函数来得到横幅的内容。
本例中,我们使用名称"getBanner"并传递参数#banner_location_id#和#site_id#。Smarty将在你的PHP应用中寻找一个名为insert_getBanner()的函数,并传递#banner_location_id#和#site_id#的值作为关联数组的第一个值。应用中所有的{insert}函数名都要在前面加上"insert_"以避免可能的函数名重复。你的insert_getBanner()函数应该对传入的值加以处理并返回结果。该结果显示在模板中替换掉{insert}标记。本例中,Smarty会这样调用函数:insert_getBanner(array("lid" => "12345","sid" => "67890"));并在{insert}标记的位置显示返回的结果。
如果指定了assign属性,那么{insert}标记的输出会赋值给该模板变量而不是输出到模板中。
注意:将输出赋值给一个模板变量在缓存打开时不是很有用。
如果指定了script属性,那么该PHP脚本将被包含(仅一次),然后才执行{insert}函数。这是因为有可能插入函数还不存在,需要首先包含PHP脚本才能运行插入函数。
文件路径可以是绝对的,也可以是相对于$trusted_dir。如果打开了$security,那么脚本必须放置在$trusted_dir中。
Smarty对象作为第二个参数被传递。这样, 在{insert}函数中,你可以引用并修改Smarty对象中的信息。
技术注解:模板可以有部分未被缓存。如果你打开了缓存,{insert}标记将不被缓存。每次页面创建时它们都会动态运行,即使是在缓存页面内。对于横幅,投票,气象实况,搜索结果,用户反馈区域等很有用。
参见{include}。