
{call} используется для вызова функции шаблона, определенной тегом {function}, так же как и функция плагина.
Заметка
Шаблонные функции определены глобально. Поскольку компилятор Smarty является однопроходным компилятором, тег{call}должен использоваться для вызова функции шаблона, определенной извне из данного шаблона. В противном случае вы можете напрямую использовать функцию как{funcname ...}в шаблоне.
- Тег
{call}должен иметьnameатрибут , который содержит имя функции шаблона. - Значения для переменных могут быть переданы в функцию шаблона в качестве атрибутов.
Атрибуты:
| Имя атрибута | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
| name | string | да | n/a | Название шаблонной функции |
| assign | string | нет | n/a | Имя переменной, которой будет присвоен выход вызываемой шаблонной функции |
| [var ...] | [var type] | нет | n/a | Переменная для передачи локальной функции в шаблон |
Варианты флагов:
| Имя | Описание |
|---|---|
| NoCache | Вызов функции шаблона в режиме nocache |
Пример. Вызов рекурсивного меню
{* определяем функцию *}
{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}
{* создаем массив для демонстрации *}
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
['item3-3-1','item3-3-2']],'item4']}
{* запускаем массив через функцию *}
{call name=menu data=$menu}
{call menu data=$menu} {* краткая запись *}
Будет генерировать следующий вывод
* item1
* item2
* item3
o item3-1
o item3-2
o item3-3
+ item3-3-1
+ item3-3-2
* item4
