fenom/docs/tags/macro.md

54 lines
2.1 KiB
Markdown
Raw Normal View History

Tag {macro} [RU]
================
2013-02-21 22:47:24 +04:00
Макросы - фрагмент шаблона который можно повторить сколь угодно раз и в каком угодно месте.
Макросы не имеют общего пространства имен с шаблоном и могут оперировать только переданными переменными.
### {macro}
Обявление макроса происходит при помощи блочного тега `{macro}`
2013-02-21 22:47:24 +04:00
```smarty
2014-01-28 21:31:26 +04:00
{macro plus($x, $y, $z=0)}
2013-02-23 13:29:20 +04:00
x + y + z = {$x + $y + $z}
2013-02-21 22:47:24 +04:00
{/macro}
```
Вызов макроса происходит при помощи строкового тега `{macro}`. Аргументы передаются стандартно, как атрибуты в HTML тегах
2013-02-21 22:47:24 +04:00
```smarty
2013-02-23 13:29:20 +04:00
{macro.plus x=$num y=100}
2013-02-21 22:47:24 +04:00
```
2014-04-09 20:04:38 +04:00
Во время рекурсивного вызова используйте суффикс macro что бы обратиться к текущему макросу:
```smarty
2014-04-12 01:00:58 +04:00
{macro plus($x, $y, $z=0)}
2014-04-09 20:04:38 +04:00
...
2014-04-12 01:00:58 +04:00
{macro.plus x=2 y=$y}
2014-04-09 20:04:38 +04:00
...
{/macro}
```
2013-03-17 14:37:23 +04:00
2013-03-04 10:13:59 +04:00
### {import}
Для использования маросов в другом шаблоне необходимо их импортировать при помощи тега `{import}`
2013-03-04 10:13:59 +04:00
```smarty
{import 'math.tpl'}
```
При импорте можно указать дргое пространство имен что бы можно было использовать одноименные макросы из разных шаблонов
2013-03-04 10:13:59 +04:00
```smarty
{import 'math.tpl' as math}
...
{math.plus x=5 y=100}
```
Пространство имен макросов может совпадать с названием какого-либо тега, в данном случае ничего плохого не произойдет: будет вызван макрос, а тег не исчезнит
При необходимости можно импортировать только необходимые макросы, явно указав в теге `{import}`
```smarty
{import [plus, minus, exp] from 'math.tpl' as math}
```