2009-02-03 17 views
5

में वैकल्पिक तालिका पंक्ति रंग 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> 

लेकिन जाहिरा तौर पर तुम वहाँ में उपयोगकर्ता त्रिगुट ऑपरेटर नहीं कर सकता।

नोट: मुझे लगता है कि मुझे पहले इसका उल्लेख करना चाहिए था, लेकिन मैं सीएसएस कक्षाओं या जावास्क्रिप्ट का उपयोग नहीं कर सकता, क्योंकि यह HTML एक ईमेल संदेश में जा रहा है। गगनभेदी चुप्पी मैं अनुमान वहाँ ऐसा करने का कोई अच्छा तरीका है से

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

:

उत्तर

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 जब सूची का उपयोग कर सकते हैं और एक सूचकांक चर खुद को बढ़ाने के लिए होने से बचाता है।

+0

के लिए – itsadok

+3

और कृपया "साफ" सीएसएस का उपयोग करें: आवश्यक होने पर प्रासंगिक वर्ग जोड़ें (वर्ग = "विषम" या कक्षा = "यहां तक ​​कि") और फिर तदनुसार सीएसएस में शैली (यानी .even {background-color: gray;} .odd {पृष्ठभूमि-रंग: सफ़ेद;} –

+0

इसके अलावा, 2.3.23 में, यदि वर्ग के नाम 'भी' और 'विषम' हैं, तो आप '' – ddekany

3

हममम ... ठीक है, यह सबसे अच्छा मैं के साथ आ गया है।

+0

आपको पता है कि आप एक ही बात करने के लिए सीएसएस या जावास्क्रिप्ट इस्तेमाल कर सकते हैं: FreeMarker उपयोग करने के लिए कोई ज़रूरत नहीं है? –

0

FreeMarker का उपयोग करते हुए, इस सवाल का जवाब देने के सीमित तरीके हैं, लेकिन आप अकेले सीएसएस का उपयोग करने (जो अभी भी चिंताओं की जुदाई की अनुमति देता है) इच्छुक रहे हैं, तो यहाँ एक ही रास्ता है:

में निम्नलिखित रखो अपने स्टाइलशीट:

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

tr.linea { 
    background-color: #CC9999; color: black; 
} 
tr.lineb { 
    background-color: #9999CC; color: black; 
} 

फिर वैकल्पिक लाइनों परिभाषित करने के लिए निम्नलिखित tr वर्ग का उपयोग

many resources भी चुनने के लिए हैं।

संपादित करें: यदि आपका एचटीएमएल एक ईमेल में जा रहा है, तो आप यह सुनिश्चित नहीं कर सकते कि क्लाइंट का ईमेल क्लाइंट जो भी HTML आप इसे डालने की कोशिश कर रहा है उसे अनुमति देगा। उस बिंदु पर आपकी सबसे अच्छी शर्त फ्रीमार्कर का उपयोग यह है कि आपके पास यह कैसे है, सिवाय इसके कि आपको style टैग को हटाने की आवश्यकता है, और <tr> टैग में bgcolor="color" का उपयोग करके प्रत्येक पंक्ति के लिए रंगों का उपयोग करें।

+1

अब मुझे वैकल्पिक "लाइनिया" और "लाइनब" के लिए एक रास्ता चाहिए - एक बहुत ही समान समस्या ... ईमेल टिप – itsadok

+0

+1 _index एक साफ चाल है। धन्यवाद! – itsadok

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> 

लेकिन, जैसा कि पिछले एक जबाब में कहा गया है, तो आप इस सीएसएस के साथ क्या कर सकते हैं, इस 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> 

तो यह सब सीएसएस में है।

6

freemarker के साथ, आप उपयोग कर सकते हैं string निर्मित:

<#list items as item> 
    <tr style='background-color: ${((item_index % 2)==0)?string("green", "blue")}'><td>${item}</td></tr> 
</#list> 
+0

आपका स्वागत है StackOverflow के लिए! इस महान टिप को जोड़ने के लिए धन्यवाद! –

25
class='${["odd", "even"][item_index%2]}' 
+1

इसे प्यार करें, स्वीकार्य उत्तर से बहुत आसान है। –

+0

सहमत हैं, अच्छा एक। –

+1

नोट: सूची के लिए चर के साथ "आइटम" को ऊपर बदलें। उदाहरण के लिए, <#list सरणी लाइन> ... [line_index% 2] ... Nathan

0

आप निम्न का उपयोग कर निर्माण FreeMarker में त्रिगुट ऑपरेटर अनुकरण कर सकते हैं: $ {? हालत स्ट्रिंग (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> 
1

FreeMarker 2.3.23 में:

<#list items as item> 
    <tr style='background-color: ${item?item_cycle('green', 'red')}'><td>${item}</td></tr> 
</#list> 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^