{call} {#language.function.call} ====== `{call}` is used to call a template function defined by the [`{function}`](#language.function.function) tag just like a plugin function. > **Note** > > Template functions are defined global. Since the Smarty compiler is a > single-pass compiler, The [`{call}`](#language.function.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](#language.syntax.attributes). **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 {* define the function *} {function name=menu level=0} {/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 *} {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}`](#language.function.function)