2013-10-15 10 views
7

मैं एचटीएमएल ईमेल के लिए जीएसपी टेम्पलेट जेनरेट करना चाहता हूं। अधिक मेल क्लाइंट का समर्थन करने के लिए एचटीएमएल शैली तत्वों में इनलाइन सीएसएस का उपयोग करने की अनुशंसा की जाती है। "Compile" CSS into HTML as inline stylesसीएसएस को एचटीएमएल में इनलाइन स्टाइल के रूप में संकलित करें?

वहाँ एक Grails प्लगइन है जहाँ मैं कुछ जीएसपी फ़ाइलों जिसके लिए सीएसएस इनलाइन के रूप में संकलित किया जाना चाहिए निर्दिष्ट कर सकते हैं है:

यहाँ उस विषय पर एक चर्चा है?

यदि कोई प्लगइन नहीं है, तो मैं जीएसपी फाइलों को कैसे निर्दिष्ट कर सकता हूं जिसके लिए सीएसएस को इनलाइन का पालन किया जाना चाहिए?

यहाँ एक उदाहरण है। मेरे पास मेरे एचटीएमएल मेल के लिए निम्नलिखित जीएसपी टेम्पलेट्स हैं जिन्हें मैं Grails mail plugin के साथ भेजता हूं।

/mail/signup_mail.gsp 
/mail/welcome.gsp 
/mail/newsletter.gsp 

प्रत्येक जीएसपी फ़ाइल में style.css फ़ाइल शामिल है। यह इनलाइन संकलित किया जाना चाहिए।

उत्तर

-2

आप अपने grails आवेदन में निम्नलिखित जावा कोड फिट कर सकते हैं।

import java.io.IOException; 
    import java.util.StringTokenizer; 

    import org.jsoup.Jsoup; 
    import org.jsoup.nodes.Document; 
    import org.jsoup.nodes.Element; 
    import org.jsoup.select.Elements; 

    public class AutomaticCssInliner { 

    public static void main(String[] args) throws IOException { 
     final String style = "style"; 
     final String html = "<html>" + "<body> <style>" 
       + "body{background:#FFC} \n p{background:red}" 
       + "body, p{font-weight:bold} </style>" 
       + "<p>...</p> </body> </html>"; 
     // Document doc = Jsoup.connect("http://mypage.com/inlineme.php").get(); 
     Document doc = Jsoup.parse(html); 
     Elements els = doc.select(style);// to get all the style elements 
     for (Element e : els) { 
      String styleRules = e.getAllElements().get(0).data().replaceAll(
        "\n", "").trim(), delims = "{}"; 
      StringTokenizer st = new StringTokenizer(styleRules, delims); 
      while (st.countTokens() > 1) { 
       String selector = st.nextToken(), properties = st.nextToken(); 
       Elements selectedElements = doc.select(selector); 
       for (Element selElem : selectedElements) { 
        String oldProperties = selElem.attr(style); 
        selElem.attr(style, 
          oldProperties.length() > 0 ? concatenateProperties(
            oldProperties, properties) : properties); 
       } 
      } 
      e.remove(); 
     } 
     System.out.println(doc);// now we have the result html without the 
     // styles tags, and the inline css in each 
     // element 
    } 

private static String concatenateProperties(String oldProp, String newProp) { 
    oldProp = oldProp.trim(); 
    if (!newProp.endsWith(";")) 
     newProp += ";"; 
    return newProp + oldProp; // The existing (old) properties should take precedence. 
} 
} 
+1

क्या आप अपना कोड समझा सकते हैं और वह क्या करता है? – confile

+0

jsoup lib (http://jsoup.org) पर एक नज़र डालें और अधिक जानकारी के लिए डीबग करने का प्रयास करें;) – emilan

+2

@emilan कृपया उद्धरण दें कि इसका उपयोग कैसे किया जाता है? –

1

हम Mailchimp API पर एक निःशुल्क विधि के साथ ऐसा करते हैं। आप प्रीमेलर का भी उपयोग कर सकते हैं।

http://apidocs.mailchimp.com/api/1.2/inlinecss.func.php

http://premailer.dialect.ca/

+0

मैं इसे Grails में कैसे शामिल कर सकता हूं? – confile

+0

दोनों बाहरी वेब सेवाएं हैं जिन्हें आप grails से कॉल कर सकते हैं: http://grails.org/Calling+External+WebServices हम इसे .NET में करते हैं, लेकिन दृष्टिकोण समान है। हम स्थानीय एचोस्ट लूपबैक पते पर ईमेल टेम्पलेट के साथ .aspx पृष्ठ को कॉल करते हैं ताकि यह HTML हो - आप अपना .gsp पृष्ठ कॉल करेंगे। फिर हम उस एचटीएमएल को सीएसएस इनलाइनर वेब सेवा में जमा करते हैं। – Jamey

+0

क्या आप कुछ कोड प्रदान कर सकते हैं इसका उपयोग कैसे किया जाता है? – confile

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