自定义指令可以使用macro指令来定义
<#macro greet>
<font>hello</font>
</#macro>
<#macro greet>和</#macro>之间的内容(称为宏定义体)当使用它作为指令时将会被执行。你可以在FTL标记中通过@代替#来使用自定义指令。使用变量名作为指令名。
<@greet></@greet>
<@greet/>
宏能做的事情还有很多,因为在<#macro ...>和</#macro>之间的东西是模版片段,也就是说它可以包含插值(${...})和FTL标签(如<#if ...>...</#if>)
注意:程序员通常将使用<@...>,这称为宏调用。
- 参数
<#macro greet person>
<font>hello ${person}</font>
</#marco>
<@greet person="dh"/>
<font>hello dh</font>
自定义指令可以有多个参数。
- 嵌套内容
<#macro border>
<font>
<#nested>
</font>
</#macro>
<@border>test<@border>
<font>test<font>
nested指令也可以多次被调用
<#macro border>
<#nested>
<#nested>
</#marco>
<@border>test</@border>
test
test
嵌套的内容可以是任意有效的FTL,包含其他的用户自定义指令。
在嵌套的内容中,宏的局部变量是不可见的。
- 宏和循环变量
自定义指令也可以有循环变量。
<#macro test>
<#nested 1>
<#nested 2>
</#macro>
<@test ; x>
${x}
</@test>
1
2
用户自定义指令,使用“;”代替“as”
一个宏可以使用多个循环变量(变量的顺序是很重要的)