{insert}

    {insert}标记非常象{include}标记,只是{insert}标记是不被缓存的,即使模板的缓存是打开的。它们在每次激活模板时运行。

属性名 类型 必需? 缺省 描述
namestringYesn/a insert函数的名称(insert_name)
assignstringNon/a 输出将赋值的模板变量名
scriptstringNon/a 在insert函数调用前需要包含的PHP脚本文件名
[var ...][var type]Non/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}标记的位置显示返回的结果。

    Smarty对象作为第二个参数被传递。这样, 在{insert}函数中,你可以引用并修改Smarty对象中的信息。

技术注解:模板可以有部分未被缓存。如果你打开了缓存{insert}标记将不被缓存。每次页面创建时它们都会动态运行,即使是在缓存页面内。对于横幅,投票,气象实况,搜索结果,用户反馈区域等很有用。

    参见{include}