在Smarty 3.1,{insert}
仅在中可用.
{insert}
的工作方式和{include}
函数很像, 除了当模板开启了时,{insert}
函数是不会被缓存, 它会在每次模板调用的时候都执行。
我们假设你有一个包含了横幅广告的模板,广告将显示在页面的顶部。 横幅广告将包括HTML、图片、FLASH等。 所以我们不能在横幅内使用静态链接,也不能对其进行缓存。 我们用{insert}:模板可以从配置文件中获取到 #banner_location_id# 和 #site_id# 值, 并且调用一个函数来显示横幅广告的内容。
在这个例子中,我们使用了名为“getBanner”的insert函数,并且传递了 #bannerlocation_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}
输出的内容将被赋值到 模板变量中,而不是进行显示。
当开启时,将输出赋值到模板变量并非很有用。
传递的第二个参数是Smarty对象。 这样你可以在 {insert}
函数内引用和修改Smarty对象的信息。
如果该PHP文件无法找到,Smarty将寻找是否有相应名称的insert插件。
这是一个使页面部分区域不进行缓存的方法。 即使你开启了缓存,{insert}
函数也不会别缓存。 它会在每次页面创建时都动态执行,即使是缓存页面。 在这一些场合,如横幅广告、投票调查、即时天气,搜索结果、用户反馈区域等比较有用。