Smarty图标

您可以根据商标通知使用Smarty 徽标。

Smarty Template Engine Smarty Template Engine

有关赞助、广告、新闻或其他询问,请通过以下方式联系我们

使用Smarty的网站

广告

{函数}

{函数}用于在模板中创建函数,并像插件函数一样调用它们。与其编写生成展示内容的插件相比,将其保留在模板中通常是一种更易于管理的选择。它还可以简化遍历数据,例如层级很深的菜单。

说明

模板函数被定义为全局函数。由于 Smarty 编译器是单次传递编译器,所以{call}标记必须用于调用从给定模板中外部定义的模板函数。否则,您可以在模板中直接使用函数,例如{funcname ...}

  • {函数}标记必须具有name属性,其中包含模板函数的名称。具有此名称的标签可用于调用模板函数。

  • 可以将变量的默认值作为属性传递给模板函数。与 PHP 函数声明一样,您只能使用标量值作为默认值。当调用模板函数时,可以覆盖默认值。

  • 您可以在模板函数中使用来自调用模板的所有变量。在模板函数中对变量进行更改或创建新变量具有局部作用域,并且在执行模板函数后调用模板中不可见。

属性

属性名称 类型 是否必须 默认值 描述
名称 字符串 不适用 模板函数的名称
[var ...] [var type] 不适用 传递给模板函数的局部默认变量值

说明

可以在调用模板函数时向其传递任意数量的参数。除非希望使用默认值,否则不得在{funcname ...}标记中声明参数变量。默认值必须为标量,并且不能是变量。必须在调用模板时传递变量。

示例7.43 递归菜单{函数}示例

{* define the function *}
{function name=menu level=0}
{function menu level=0}          {* short-hand *}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      <li>{$entry@key}</li>
      {menu data=$entry level=$level+1}
    {else}
      <li>{$entry}</li>
    {/if}
  {/foreach}
  </ul>
{/function}

{* create an array to demonstrate *}
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
['item3-3-1','item3-3-2']],'item4']}

{* run the array through the function *}
{menu data=$menu}

  

将生成以下输出

* item1
* item2
* item3
      o item3-1
      o item3-2
      o item3-3
            + item3-3-1
            + item3-3-2
* item4

  

另请参见 {call}