具有少量嵌套元素的 Freemarker 宏

问题描述 投票:0回答:2

如何在宏中拥有几个不同的 #nested 元素?

macros freemarker
2个回答
30
投票

宏中不能有不同的 #nested 元素,每次使用都会输出相同的文本。

如果您的目标是在宏中具有多个变量部分,则可以使用 #assign 元素。

页面示例#macro允许定义正文、页眉和页脚内容:

<#macro pageTemplate header="" footer="">
    ${header}
    <#nested >
    ${footer}
</#macro>

然后,您可以使用 #assign 元素定义每个部分(但不可否认,拥有多个命名的 #nested 元素会更好)。

<#assign headerContent>
     This is the header.
</#assign>
<#assign footerContent>
     This is the footer.
</#assign>
<@pageTemplate header=headerContent footer=footerContent>
     This is the nested content.
</@pageTemplate>

结果输出将是:

This is the header.
This is the nested content.
This is the footer.

0
投票

#nested
指令可以有变量。所以当调用宏时我们可以检查它的值。

<#macro drawHtmlBlock>
    <div class="html_block">
        <div class="html_block__header">
            <#nested 'header'/>
        </div>

        <div class="html_block__footer">
            <#nested 'footer'/>
        </div>
    </div>
</#macro>

<@drawHtmlBlock ; contentType>
    <#if contentType == 'header'>
        header_content
    <#elseif contentType == 'footer'>
        footer_content
    </#if>
</@drawHtmlBlock>
© www.soinside.com 2019 - 2024. All rights reserved.