aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md
blob: c07fb49b9c62719b77999c92a1a701c6fbd973d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# {call}

`{call}` is used to call a template function defined by the
[`{function}`](./language-function-function.md) tag just like a plugin
function.

> **Note**
>
> 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
    name of the template function.

-   Values for variables can be passed to the template function as
    [attributes](../language-basic-syntax/language-syntax-attributes.md).

## Attributes

| Attribute Name | Required | Description                                                                              |
|----------------|----------|------------------------------------------------------------------------------------------|
| name           | Yes      | The name of the template function                                                        |
| assign         | No       | The name of the variable that the output of called template function will be assigned to |
| [var ...]      | No       | variable to pass local to template function                                              |

## Option Flags

| Name    | Description                                |
|---------|--------------------------------------------|
| nocache | Call the template function in nocache mode |


## Examples

```smarty
    {* define the function *}
    {function name=menu level=0}
      <ul class="level{$level}">
      {foreach $data as $entry}
        {if is_array($entry)}
          <li>{$entry@key}</li>
          {call name=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 *}
    {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.md).