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>
等将起作用。
我使用 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>
等将起作用。