2008-10-17 13 views
7

पर असाइन करें कहें कि आपके पास शामिल (पार्स किए गए) शीर्षलेख, शरीर, पाद लेख टेम्पलेट्स के साथ एक मानक टेम्पलेट है।वेग #parse लेकिन इसे एक चर

शरीर टेम्पलेट में $ चर की तरह एक चर परिभाषित किया गया है और आप हेडर टेम्पलेट में भी प्रदर्शित करना चाहते हैं।

एचटीएमएल :: मेसन (पर्ल आधारित) जैसी कुछ अन्य टेम्पलेट भाषाओं में आप $ विषय चर को चुनने के लिए पहले बॉडी टेम्पलेट का मूल्यांकन करेंगे, लेकिन इसे अस्थायी रूप से एक चर में स्टोर करें ताकि आपका अंतिम आउटपुट सही हो सके आदेश (हेडर, शरीर, पाद लेख)

वेग ऐसा

सेट कुछ ऐसा दिखाई देगा में ($ शरीर = # पार्स ("body.vm"))

पार्स ("header.vm")

$ {body}

पार्स ("footer.vm")

हालांकि यह काम नहीं कर रहा है, यह कैसे करना है इस पर कोई विचार है?

उत्तर

3

आप VelocityLayoutServlet का उपयोग कर ऐसा कर सकते हैं जो VelocityTools का हिस्सा है।

यह आप अपने आवेदन के लिए एक लेआउट परिभाषित करने के लिए अनुमति देता है - यह application.vm कॉल - जिसमें आप शीर्ष लेख, पाद लेख आदि में पार्स करने और घोषणा कर सकते हैं जहां मुख्य शरीर सामग्री screen_content घोषणा, जैसे का उपयोग कर रख दिया गया है:

#set($subject = "My Subject") 
<div id="content"> 
</div> 

अधिक डे:

<html> 
    <head> 
    <title>$subject</title> 
    </head> 
    <body> 
    #parse("header.vm") 
    $screen_content 
    #parse("footer.vm") 
    </body> 
</html> 

VelocityLayoutServlet प्रतिपादन जो आप अपने शरीर टेम्पलेट में एक $subject चर सेट करने की अनुमति देता है, जैसे पहले टेम्प्लेट (चर और, इसलिए,) evalulate होगा पूंछ की जानकारी in the Velocity documentation मिल सकती है।

0

यदि मैं आपको सही ढंग से समझता हूं, तो आप $subject नामक वेग वेग को header.vm और body.vm टेम्पलेट्स में विभाजित करना चाहते हैं। अभी, चर को body.vm टेम्पलेट में परिभाषित किया गया है, इसलिए आप इसे पहले के टेम्पलेट header.vm में संदर्भित नहीं कर सकते हैं।

क्यों आप globals.vm नामक अपने स्वयं के टेम्पलेट स्निपेट में $ विषय की परिभाषा को सारणित नहीं करते हैं, फिर शीर्ष स्तर के टेम्पलेट में शामिल करें। तो आपके पास होगा:

#parse("globals.vm") 
#parse("header.vm") 
#parse("body.vm") 
#parse("footer.vm") 
9

उपर्युक्त दो समाधानों में से कोई भी काम करेगा। VelocityLayoutServlet समाधान के लिए Velocity उपकरण नामक एक अतिरिक्त पैकेज (Velocity से भी) की आवश्यकता है। मैं इस दृष्टिकोण (और रूपों) के लिए आंशिक हूं।

एक तीसरा विधि उद्धरण भीतर #parse डाल करने के लिए बस है:

set ($body="#parse('body.vm')") 

एक #set के भीतर, दोहरे उद्धरण में कुछ भी मूल्यांकन किया जाता है। एकल उद्धरण के भीतर स्ट्रिंग्स सचमुच पारित की जाती हैं।

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