smarty类中的insert内建函数的介绍及使用方法

in 程序开发

{insert}

{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#值(从配置文件中得 到),并需要调用一个函数来得到横幅的内容。

例子7-22. {insert}函数

{* 获得横幅的例子 *}
{insert name="getBanner" lid=#banner_location_id# sid=#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}

0 Comments

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>