HTML 编辑器删除了 <table> 标签内的 FreeMarker 标签

HTML editor removes FreeMarker tags inside <table> tag

我使用 FreeMarker 构建从电子邮件到发票模板的各种模板。我现在正在寻找的问题与在 table 标签外提取的 FreeMarker 代码有关,因为 HTML 不允许其中除了 tbody、thead、tr.

之外的其他字符

如果有人知道如何绕过这个,我们会很高兴。

示例:

<table>
                    <tbody>
                        [#assign eventDetails = []]
                        [#if items?? && items?has_content]
                            [#list items as item]
                                <tr>
                                    <td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
                                        ${item.name}
                                    </td>
                                </tr>
                            [/#list]
                        [/#if]
                    </tbody>
                </table>

使用element.innerHTML应用于编辑器后变成这样:

[#assign eventDetails = []]
[#if items?? && items?has_content]
  [#list items as item]
  [/#list]
[/#if]
<table>
                    <tbody>
 
                                <tr>
                                    <td  style="padding: 5px;vertical-align: top;border-bottom: 1px solid #eee; text-align: center;">
                                        ${item.name}
                                    </td>
                                </tr>
                    </tbody>
                </table>

这当然只取决于您使用的 HTML 编辑器,但如果发生同样的情况,您应该尝试:

  • 您正在使用 <#...> 语法。这看起来像是编辑器的一些未知标签,而不是 CDATA,所以可能它的反应方式不同。
  • <tbody>...</tbody> 替换为 [@html.tbody]...[/@html.tbody]。那么编辑可能没有足够的信心删除内容。或者,与 [@html.table] 相同,等等。相当笨拙,但可能比你现在拥有的更好。 (为了在 运行 模板时实际工作,您当然必须在 html 命名空间中定义 tbody 宏。它不是内置的。)

最后的例子:

<#ftl output_format='HTML'>

<#macro table attrs...><@elementWithNested 'table' attrs><#nested></@></#macro>
<#macro tbody attrs...><@elementWithNested 'tbody' attrs><#nested></@></#macro>

<#macro elementWithNested elementName attrs>
<${elementName}<#if attrs?size != 0><#list attrs as k, v> ${k}="${v}"</#list></#if>>
<#nested>  
</${elementName}>
</#macro>

如果上述模板 #import 编辑为 html,则 <@html.table foo="bar">...</@html.table> 等将起作用。