使用freemarker进行备用行着色的简单方法是什么?
这真的是最好的方法吗?
<#assign row=0>
<#list items as item>
<#if (row % 2) == 0>
<#assign bgcolor="green">
<#else>
<#assign bgcolor="red">
</#if>
<tr style='background-color: ${bgcolor}'><td>${item}</td></tr>
<#assign row = row + 1>
</#list>
我试过这样做:
<#assign row=0>
<#list items as item>
<tr style='background-color: ${(row % 2) == 0 ? "green" : "blue"}'><td>${item}</td></tr>
<#assign row = row + 1>
</#list>
但显然你不能在那里使用三元运算符。
注意:我想我之前应该提到它,但我不能使用css类或javascript,因为这个HTML会发送到电子邮件中。
答案 0 :(得分:27)
class='${["odd", "even"][item_index%2]}'
答案 1 :(得分:14)
如果你有一系列的表格,你可能想要做一点功能。
<#function zebra index>
<#if (index % 2) == 0>
<#return "white" />
<#else>
<#return "#efefef" />
</#if>
</#function>
<#assign arr=["a","b","c","d"] />
<table>
<#list arr as n>
<tr><td bgcolor=${zebra(n_index)}>${n}</td></tr>
</#list>
</table>
和使用列表时的_index builtin使您不必自己制作和增加索引变量。
答案 2 :(得分:7)
使用freemarker,您可以使用内置的string
:
<#list items as item>
<tr style='background-color: ${((item_index % 2)==0)?string("green", "blue")}'><td>${item}</td></tr>
</#list>
答案 3 :(得分:3)
<#assign row=0>
<#list items as item>
<tr style='background-color: <#if (row % 2) == 0>green<#else>red</#if>'><td>${item}</td></tr>
<#assign row = row + 1>
</#list>
从震耳欲聋的沉默中我推断出没有更好的方法可以做到这一点。
答案 4 :(得分:1)
然后解决方案归结为:
<style>
.rowon {
background-color:#dedede;
}
.rowoff{
}
</style>
在你的模板中:
<#list items as item>
<tr class="<#if item_index % 2 ==0>rowon<#else>rowoff</#if>"><td>${item}</td></tr>
</#list>
但是,如前一个回复中所述,您可以使用CSS执行此操作,但不使用此freemarker解决方案(请参阅http://www.w3.org/Style/Examples/007/evenodd):
<style>
.striped tr:nth-child(odd) {background: #eee}
.striped tr:nth-child(even) {background: #fefefe}
</style>
然后只使用行上没有类的普通表:
<table class="striped">
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
<tr><td>hello</td></tr>
</table>
OR与freemarker生成的表格:
<table class="striped">
<#list items as item>
<tr><td>${item}</td></tr>
</#list>
</table>
所以这一切都在CSS中。
答案 5 :(得分:1)
在FreeMarker 2.3.23中:
<#list items as item>
<tr style='background-color: ${item?item_cycle('green', 'red')}'><td>${item}</td></tr>
</#list>
答案 6 :(得分:0)
使用FreeMarker,回答这个问题的方法有限,但是如果你想单独使用CSS(这仍然允许分离关注点),那么这是一种方式:
在样式表中添加以下内容:
tr.linea {
background-color: #CC9999; color: black;
}
tr.lineb {
background-color: #9999CC; color: black;
}
然后使用以下tr
类来定义备用行:
<table>
<tr class="linea"><td>One Fish</td></tr>
<tr class="lineb"><td>Two Fish</td></tr>
<tr class="linea"><td>Red Fish</td></tr>
<tr class="lineb"><td>Blue Fish</td></tr>
</table>
还有many resources可供选择。
编辑:如果您的HTML进入电子邮件,那么您无法确定客户端的电子邮件客户端是否允许您尝试将任何HTML放入其中。此时您最好的选择是使用类似于FreeMarker的方式,除非您需要删除style
标记,并使用bgcolor="color"
中<tr>
的每一行使用颜色标签
答案 7 :(得分:0)
您可以使用以下构造在FreeMarker中模拟三元运算符: $ {condition?string(result_for_true,result_for_false)}。
<#assign arr=["a","b","c","d"] />
<table>
<#list arr as n>
<tr><td bgcolor=${((index % 2) == 0)?string("white", "#efefef")}>${n}</td></tr>
</#list>
</table>