{insert}

重要提示

{insert}是废弃的函数,不应该再使用。将你的PHP逻辑放到PHP脚本中或者通过插件来代替。

Note

在Smarty 3.1,{insert}仅在SmartyBC中可用.

{insert}的工作方式和{include}函数很像, 除了当模板开启了caching时,{insert}函数是不会被缓存, 它会在每次模板调用的时候都执行。

参数名称 类型 必选参数 默认值 说明
name string Yes n/a insert函数的名称(insert_name) 或 insert 插件
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# 值, 并且调用一个函数来显示横幅广告的内容。

Example 7.56. {insert} 函数

{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
{insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* short-hand *}

在这个例子中,我们使用了名为getBanner的insert函数,并且传递了 #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}的位置。

传递的第二个参数是Smarty对象。 这样你可以在 {insert} 函数内引用和修改Smarty对象的信息。

如果该PHP文件无法找到,Smarty将寻找是否有相应名称的insert插件。

技术说明

这是一个使页面部分区域不进行缓存的方法。 即使你开启了缓存{insert}函数也不会别缓存。 它会在每次页面创建时都动态执行,即使是缓存页面。 在这一些场合,如横幅广告、投票调查、即时天气,搜索结果、用户反馈区域等比较有用。

参见 {include}