{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} 函数

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

在这个例子中,我们使用了名为“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}输出的内容将被赋值到 模板变量中,而不是进行显示。

Note

caching开启时,将输出赋值到模板变量并非很有用。

  • 如果设置了script属性, 在{insert}函数执行之前,该路径的PHP文件将被载入(仅一次)。 当该insert函数并不存在是,使用这个方法可以在该PHP文件中载入此函数。

    载入的PHP文件路径可以是绝对路径,或是相对于 $trusted_dir的路径。 如果安全机制开启,那么只有在$trusted_dir目录中的文件才可以被载入。 参见安全机制

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

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

技术说明

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

参见 {include}

原文: https://www.smarty.net/docs/zh_CN/language.function.insert.tpl