{call} is used to call a template function defined by the {function} tag just like a plugin function.


Template functions are defined global. Since the Smarty compiler is a single-pass compiler, The {call} tag must be used to call a template function defined externally from the given template. Otherwise you can directly use the function as {funcname ...} in the template.

  • The {call} tag must have the name attribute which contains the the name of the template function.

  • Values for variables can be passed to the template function as attributes.


Attribute Name Type Required Default Description
name string Yes n/a The name of the template function
assign string No n/a The name of the variable that the output of called template function will be assigned to
[var ...] [var type] No n/a variable to pass local to template function

Option Flags:

Name Description
nocache Call the template function in nocache mode

Example 7.20. Calling a recursive menu example

{* define the function *}
{function name=menu level=0}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      {call name=menu data=$entry level=$level+1}

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

{* run the array through the function *}
{call name=menu data=$menu}
{call menu data=$menu} {* short-hand *}


Will generate the following output

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


See also {function}