Переменная строка таблицы раскрашивает freemarker

С помощью tidyverse вы можете сделать:

PAIRS %>%
 rowid_to_column() %>%
 gather(var, val, -rowid) %>%
 left_join(LISTN, by = c("val" = "Names")) %>%
 select(-val) %>%
 spread(var, Id) %>%
 select(-rowid)

  Name1 Name2
1     1     2
2     3     4

Он преобразует df PAIRS из широкоформатного формата в длинный, объединяет его с LISTN df по именам и затем преобразовывает его обратно в широкоформатный формат со значениями из "Id".

7
задан itsadok 4 February 2009 в 12:55
поделиться

6 ответов

Если у вас есть серия таблиц, вы можете сделать небольшую функцию.

<#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 при использовании списка избавляет вас от необходимости самостоятельно создавать и увеличивать индексную переменную.

14
ответ дан 6 December 2019 в 04:48
поделиться

Хм... Хорошо, это является лучшим, я придумал:

<#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>

От оглушительной тишины я вывожу нет никакого более хорошего способа сделать это.

3
ответ дан 6 December 2019 в 04:48
поделиться

Используя 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>

Существует много ресурсов для выбора из также.

Править: Если Ваш HTML входит в электронное письмо, то Вы не можете быть уверены, что почтовый клиент клиента позволит любой HTML, который Вы пытаетесь поместить в него. Ваш лучший выбор в той точке состоит в том, чтобы использовать FreeMarker, подобный тому, как у Вас есть он, за исключением того, что необходимо удалить style тег и использование окрашивают для каждого использования строки bgcolor="color" в Вашем <tr> теги.

0
ответ дан 6 December 2019 в 04:48
поделиться

Решение сводится к следующему:

<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>

ИЛИ с таблицей, созданной freemarker:

<table class="striped">
<#list items as item>
    <tr><td>${item}</td></tr>
</#list>
</table>

Так что все это в CSS.

1
ответ дан 6 December 2019 в 04:48
поделиться

С freemarker вы можете использовать string встроенный:

<#list items as item>
   <tr style='background-color: ${((item_index % 2)==0)?string("green", "blue")}'><td>${item}</td></tr>
</#list>
7
ответ дан 6 December 2019 в 04:48
поделиться
class='${["odd", "even"][item_index%2]}'
27
ответ дан 6 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: