Smarty:insert函数
{insert}
重要提示
{insert}
是废弃的函数,不应该再使用。将你的PHP逻辑放到PHP脚本中或者通过插件来代替。
温馨提示:
在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}的位置。
如果设置了
assign
属性,那么{insert}
输出的内容将被赋值到 模板变量中,而不是进行显示。温馨提示:
当caching开启时,将输出赋值到模板变量并非很有用。
如果设置了
script
属性, 在{insert}
函数执行之前,该路径的PHP文件将被载入(仅一次)。 当该insert函数并不存在是,使用这个方法可以在该PHP文件中载入此函数。载入的PHP文件路径可以是绝对路径,或是相对于
$trusted_dir
的路径。 如果安全机制开启,那么只有在$trusted_dir
目录中的文件才可以被载入。 参见安全机制。
传递的第二个参数是Smarty对象。 这样你可以在 {insert}
函数内引用和修改Smarty对象的信息。
如果该PHP文件无法找到,Smarty将寻找是否有相应名称的insert插件。
技术说明
这是一个使页面部分区域不进行缓存的方法。 即使你开启了缓存,{insert}
函数也不会别缓存。 它会在每次页面创建时都动态执行,即使是缓存页面。 在这一些场合,如横幅广告、投票调查、即时天气,搜索结果、用户反馈区域等比较有用。
参见 {include}