HTML के लिए टेम्पलेट इंजन।

इस हफ्ते खासतौर पर स्मार्टी और एक्सएसएलटी के खाके के बारे में लिखा गया। उसी समय, आपका विनम्र सेवक इस बात के बारे में बहुत सोच रहा था कि उसकी परियोजनाओं पर किस तरह के टेम्पलेट इंजन का उपयोग करना है, और निराशाजनक निष्कर्ष पर आया कि उसे कुछ भी पसंद नहीं था। अगला, टेम्पलेट लिखने के बुनियादी तरीकों पर विचार किया जाएगा, यह लिखा गया है कि वे अच्छे नहीं हैं और समस्या पर उनके विचार प्रस्तावित हैं।



इसलिए, जैसा कि आप जानते हैं, कोड और प्रस्तुति को अलग करने के लिए डिज़ाइन किए गए हैं, और तदनुसार टाइप्टर और प्रोग्रामर के काम को अलग करते हैं। इस आश्चर्यजनक नई जानकारी से, हम यह निष्कर्ष निकाल सकते हैं कि आदर्श टेम्पलेट में शुद्ध html शामिल होना चाहिए, क्योंकि लेआउट डिजाइनर को केवल html और css (जो कि ब्राउज़रों के मौजूदा चिड़ियाघर के साथ एक उपलब्धि है) और प्रोग्रामर के साथ काम करना चाहिए, क्योंकि वह एक आलसी और महंगा प्राणी है। सामग्री में, उसे व्यावसायिक तर्क करना होगा।

इसके अलावा, एक नियम के रूप में, लेआउट डिजाइनर का कार्य कोड बनाना है जो ब्राउज़र में लेआउट के समान दिखता है, इसलिए यह वांछनीय है कि टेम्पलेट को ब्राउज़र में या दृश्य संपादक में देखा जा सकता है - नोटपैड में लेआउट, ज़ाहिर है, कोषेर है, लेकिन ड्रीमव्यूअर डेवलपर्स भी कुछ नहीं के लिए रोटी नहीं खाते।



तो, निम्नलिखित सामान्य टेम्पलेट इंजनों पर विचार करें।



प्रोग्रामिंग भाषा





सबसे आम टेम्पलेट इंजन, लचीला, स्वादिष्ट और शक्तिशाली, आपको वह सब कुछ करने की अनुमति देता है जो आप सोच सकते हैं। लेकिन दूसरी ओर, प्रोग्राम करना आवश्यक है, और सिंटैक्स, इसकी शक्ति के कारण, टेम्पलेट में इसके उपयोग के लिए अनावश्यक है। बस php या jsp में वेरिएबल को आउटपुट करने के लिए, आपको बहुत सारे जेस्चर करने की आवश्यकता है। इसके अलावा, इसके लिए भाषा को जानने के लिए लेआउट डिज़ाइनर की आवश्यकता होती है और इस तरह के टेम्पलेट को भाषाओं के बीच पोर्ट नहीं किया जा सकता है (मुझे नहीं पता कि यह कितना प्रासंगिक है, यांडेक्स से छोटी परियोजनाओं के लिए)।



चतुर



http://www.smarty.net/

सबसे लोकप्रिय टेम्पलेट इंजनों में से एक, इसलिए, उदाहरण के लिए, इस पर विचार करें। यह आपको फ़ंक्शन, लूप, शर्तों का उपयोग करने की अनुमति देता है, लेकिन अंत में हमारे पास एक ही प्रोग्रामिंग भाषा है, केवल आसान है, जो, हालांकि, इसे सीखने की आवश्यकता को समाप्त नहीं करता है। फिर से, जब ब्राउज़र में एक टेम्प्लेट देखते हैं, तो सशर्त चक्रों से विभिन्न अप्रिय रुधियाँ निकलती हैं, आदि। इसके अलावा, किसी भी तुच्छ कार्य को करने के लिए, जैसे कि एक पंक्ति में तीन की तालिका में चित्रों को प्रदर्शित करना, "प्रोग्राम" करना आवश्यक है, जो कि मेरी राय में, ऐसे बच्चे के कार्य के लिए बहुत अधिक है। आप निश्चित रूप से, एक फ़ंक्शन लिख सकते हैं, लेकिन वहां आपको html कोड के टुकड़े करना होगा, और यह भी एक विकृति है।



XSLT





पहिया के बाद सबसे बड़ा, मानव जाति का आविष्कार, जैसा कि हमने इस सप्ताह देखा है। लेकिन मुख्य पकड़ यह है कि XSLT रोबोट के लिए एक दस्तावेज़ को दूसरे समान रूप से अपठनीय दस्तावेज़ में स्थानांतरित करने के लिए एक आदर्श उपकरण है (अर्थात, XML निश्चित रूप से मनुष्यों द्वारा पढ़ा जा सकता है, लेकिन यह एक संदिग्ध खुशी है)।

तदनुसार, टेम्प्लेट उन टैगों का एक प्रकार है जो अतिरिक्त करीबी परीक्षा की आवश्यकता है। हमारे गोलाकार लेआउट डिजाइनर, मैं आपको याद दिलाता हूं, HTML को अच्छी तरह से जानना चाहिए, और अपने खाली समय में खुद को सुधारना चाहिए।

इसके अलावा, एक नियम के रूप में, पहले पृष्ठ लेआउट से लेआउट है, यह ब्राउज़रों में दिखता है (ग्राहक को दिखाया गया है), और फिर इसे एक्सएसएलटी पर पुनर्निर्देशित करना होगा, अर्थात। एक ही काम दो बार करें।

और, जैसा कि मैंने ऊपर लिखा है, XSLT एक या एक से अधिक XML फ़ाइलों को दूसरे में अनुवाद करने के लिए एक उपकरण है, और आपको इसे अपने इच्छित उद्देश्य के लिए समान उपयोग करना चाहिए।



ब्लिट्ज टेम्प्लेट



http://alexeyrybak.com/blitz/blitz_ru.html

टेम्पलेट इंजन सभी के लिए अद्भुत है, लेकिन अब केवल टेम्प्लेट का तर्क प्रोग्रामर पर छोड़ दिया गया है। डेटा उत्पन्न करने और इसे टेम्पलेट पर भेजने और भूलने के बजाय, अब हमारे नियंत्रक (और, परिणामस्वरूप, प्रोग्रामर) को चक्रों को घुमाना होगा और अन्य निर्बाध कार्यों पर काम करना होगा।



खाका इंजन की तरह।



यह asp.net में उपयोग किया जाता है, और आपको विंडोज़ फॉर्म के समान, बैकएंड से इसके गुणों और सामग्रियों को बदलने के लिए "रन ऑन सर्वर" विशेषता को निर्दिष्ट करने की अनुमति देता है। विधि दिलचस्प है, लेकिन प्रदर्शन के मामले में संदिग्ध है, हालांकि निश्चित रूप से सब कुछ कैश और अनुकूलित है। इसके अलावा, मैंने asp.net को छोड़कर कहीं भी इस तरह के दृष्टिकोण के कार्यान्वयन को नहीं देखा है (हालांकि मुझे ज्यादातर php के साथ कब्जा कर लिया गया था), HTML_MetaForm Koterova, आखिरकार, एक अलग ओपेरा से थोड़ा सा है।

इसके अलावा, प्रोग्रामर को फिर से विभिन्न निर्बाध चीजों से निपटना पड़ता है, जैसे कि छवियों की src विशेषताओं को बदलना।

लेखक की बाइक





वास्तव में, यह और भी अधिक संभावना है कि एक टेम्पलेट इंजन नहीं है, लेकिन टेम्पलेट्स के लिए एक पूर्वप्रक्रमक। टेम्प्लेट के तर्क इस स्थिति, चक्र और बड़े, रूपों के साथ चक्र और कुछ नियमित संचालन से चमकते नहीं हैं। इस प्रकार, हमें केवल यह इंगित करने की आवश्यकता है कि html का कौन सा टुकड़ा ज़िम्मेदार है, और यह html टिप्पणियों का उपयोग करके किया जा सकता है, जो वास्तव में इसके लिए आविष्कार किए गए थे।

इस प्रकार, पहले मानी गई समस्या, तस्वीरों के आउटपुट के साथ एक पंक्ति में तीन (मुझे पता है कि यह divs के साथ किया जा सकता है, लेकिन यह इतना स्पष्ट नहीं है), टिप्पणियों की व्यवस्था करने के लिए नीचे आता है:

  <Code>
 <! - op: प्रत्येक src = "$ छवियां" विभाजन = "3" ->
 <! - प्रत्येक: शीर्ष लेख ->
 <तालिका>
 <! - / प्रत्येक: शीर्ष लेख ->
 <! - प्रत्येक: स्प्लिटोप ->
 <Tr>
 <! - / प्रत्येक: स्प्लिटोप ->
 <! - प्रत्येक: पंक्ति ->
 <td> <a href=" तायादिलंबदश · <img src = "{$ src}" alt = "{$ शीर्षक}" चौड़ाई = "100" ऊंचाई = "100" /> </a> </ td >
 <! - / प्रत्येक: पंक्ति ->
 <! - प्रत्येक: स्प्लिटबोट ->
 </ Tr>
 <! - / प्रत्येक: स्प्लिटबोट ->
 <! - प्रत्येक: पाद ->
 </ तालिका>
 <! - प्रत्येक: पाद ->
 <! - प्रत्येक: और ->
 कुछ भी नहीं है :(
 <! - / प्रत्येक: और ->
 <! - / सेशन: प्रत्येक ->
 </ Code> 


यह कुछ हद तक बेमानी लगता है, लेकिन वास्तविक स्थिति में, कोड का HTML बहुत बड़ा होगा, लेकिन आपको अभी भी लेआउट पर टिप्पणी करने की आवश्यकता है।

प्रत्येक निर्देश को एक अलग वर्ग (इस मामले में Optemplate_tag_each) द्वारा संसाधित किया जाता है, जिसके पास सबनॉड्स और विशेषताओं तक पहुंच होती है, और उनके आधार पर अंतिम कोड (php, jsp, smarty - जो आपके लिए अधिक सुविधाजनक होता है) उत्पन्न करता है।

इसी समय, एक जादू नोड भी है "डिफ़ॉल्ट रूप से" किसी भी "सबटैग" तक सीमित नहीं है, जो सरल मामलों में निर्देशों की संख्या को कम करने की अनुमति देता है। यानी आप इसे इस तरह लिख सकते हैं:

  <Code>
 <! - op: प्रत्येक src = "$ फ़ोल्डर" ->
 <h3> {$ शीर्षक} </ h3>
 <div> {$ पाठ} </ div>
 <! - / सेशन: प्रत्येक ->
 </ Code> 


<p परिणाम के रूप में, जैसे ही आपके पास किसी चीज़ को आउटपुट करने के लिए एक नया रूटीन कार्य होता है, आप बस एक नया वर्ग लिखते हैं, जो, उदाहरण के लिए, इनपुट के लिए आईडी और मूल्यों को प्रतिस्थापित करने के रूपों के साथ काम कर सकता है। उसी समय, आप सीएमएस पर निर्भर नहीं होते हैं क्योंकि आप टैग को फिर से लिख सकते हैं कि डेटा को टेम्पलेट में कैसे स्थानांतरित किया जाता है।



इस प्रकार, हमारे पास एक एक्स्टेंसिबल टेम्पलेट इंजन है जो हर किसी को अपनी चीज करने की अनुमति देता है, और, सैद्धांतिक रूप से, तीसरे पक्ष के टैग का उपयोग करने की क्षमता है।



कार्यान्वयन





एक कार्यान्वयन है, लेकिन बल्कि खराब है - इसे दृष्टिकोण की सुविधा की जांच करने की अधिक संभावना बनाई गई थी, विशेष रूप से, एक ही प्रकार के नेस्टेड टैग समर्थित नहीं हैं। यदि दृष्टिकोण रुचि का है और व्यवहार में विधि सुविधाजनक है - मैं सामान्य संस्करण लिखूंगा, यह मुश्किल नहीं है।



All Articles