marco, nested, return 指令
语法:
<#marco name param1 param2 ... paramN> ... <#nested loopvar1,loopvar2,...,loopvarN> ... <#return> ... </#marco>
说明:
- name: 宏变量的名称,它不是表达式。
- param1,param2等:局部变量的名称,存储参数的值(不是表达式)
- loopvar1,loopvar2等:可选的循环变量的值,是nested指令想为嵌套内容创建的。这些都是表达式。
- return 和 nested指令时可选的。 而且可以在<#marco></#marco>之间被用在任意位置和任意次数。
- 没有默认值的参数必须在有默认值参数(paramName=defaultValue)之前。
marco 宏变量存储模板片段(宏定义体),可以被用作自定义指令。这个变量也存储自定义指令的被允许的参数名。当将这个变量作为指令时,必须给所有参数赋值,除了有默认值的参数。默认值当且仅当你调用宏而不给参数赋值时起作用。
变量会在模板开始时被创建,而不管 marco指令放置在模板的什么位置。
示例1:有参数的、且有默认值参数
<#macro test foo bar="Bar" baaz=-1> Test text, and the params: ${foo}, ${bar}, ${baaz} </#macro> <@test foo="a" bar="b" baaz=5*5-2/> <@test foo="a" bar="b"/> <@test foo="a" baaz=5*5-2/> <@test foo="a"/>
输出结果:
Test text, and the params: a, b, 23
Test text, and the params: a, b, -1
Test text, and the params: a, Bar, 23
Test text, and the params: a, Bar, -1
示例2:
<#macro list title items> <p>${title?cap_first}: <ul> <#list items as x> <li>${x?cap_first} </#list> </ul> </#macro> <@list items=["mouse", "elephant", "python"] title="Animals"/>
nested 指令执行自定义指令开始和结束标签中间的模板片段。嵌套的片段可以包含模板中合法的任意内容:插值,指令…等。它在上下文环境中被执行,也就是宏被调用的地方,而不是宏定义体的上下文中。因此,比如,你不能看到嵌套部分的宏的局部变量。
示例3:
<#macro do_twice> 1. <#nested> 2. <#nested> </#macro> <@do_twice>something</@do_twice> 输出: 1. something 2. something
示例4:(嵌套指令可以对嵌套内容创建循环变量)
<#macro do_thrice> <#nested 1> <#nested 2> <#nested 30> </#macro> <#-- 在自定义指令的情形下,语法是循环变量的名称在分号之后给定--> <@do_thrice ; x> ${x} Anything. </@do_thrice> 输出: 1Anything. 2 Anything. 30 Anything.