旧式宏和调用指令
Page Contents
Synopsis
<#macro name(argName1, argName2, ... argNameN)>
...
</#macro>
<#call name(argValue1, argValue2, ... argValueN)>
Where:
-
name
:宏的名称(不是表达式) -
argName1
,argName2
,...等:local variables的名称存储参数值(不是表达式) -
argValue1
,argValue2
,...等:表达式,参数值
Description
Note:
这是 FreeMarker 2.1 宏和与宏相关的指令的文档。这些仍在工作,但已弃用。您可能需要阅读 FreeMarker 2.2 参考:macro, return,用户定义的指令调用
宏是具有相关名称的模板片段。您可以在模板的多个位置上使用该命名的片段,因此它有助于执行重复的任务。宏可以具有影响使用宏时生成的输出的参数。
您可以使用macro
指令定义宏,然后可以在整个模板中使用已定义的宏。 macro
指令本身不向输出写入任何内容,它只是定义了宏。例如,这将定义一个名为warning
的宏:
<#macro warning(message)>
<div align=center>
<table border=1 bgcolor=yellow width="80%"><tr><td align=center>
<b>Warning!</b>
<p>${message}
</td></tr></table>
</div>
</#macro>
每当您将call
指令与宏名称一起使用时,将处理宏定义主体(宏开始标记和结束标记之间的部分)。例如,这将调用名为warning
的宏:
<#call warning("Unplug the machine before opening the cover!")>
并将其写入输出:
<div align=center>
<table border=1 bgcolor=yellow width="80%"><tr><td align=center>
<b>Warning!</b>
<p>Unplug the machine before opening the cover!
</td></tr></table>
</div>
作为参数传递给call
指令的参数将在宏定义主体中以local variables的形式访问。
调用宏时,必须指定与宏定义中指定数量相同的参数。例如,如果这是宏定义:
<#macro test(a, b, c)>Nothing...</#macro>
那么这些是有效的宏调用:
<#call test(1, 2, 3)>
<#call test("one", 2 + x, [1234, 2341, 3412, 4123])>
如果宏没有参数,则可以省略括号:
<#macro test>mooo</#macro>
<#call test>
定义宏时,该宏将在仅定义宏的模板中可用。但是可能您想在更多模板中使用相同的宏。在这种情况下,您可以将宏定义存储在一个通用文件中,然后将该文件包含在需要这些宏的所有模板中。
可以调用在模板中进一步定义的宏(因为宏是在解析时定义的,而不是在处理时定义的)。但是,如果宏定义是通过include
指令插入的,则在 FreeMarker 执行include
指令之前它们将不可用。
您可以使用return
指令将宏定义主体保留在</#macro>
标记之前。