टेम्पलेट सिंटैक्स मानकों। पहला कदम

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

टेम्पलेट में आउटपुट को नियंत्रित करने के लिए मुख्य प्रकार की संरचनाएं:

  1. चर।
  2. सशर्त बयान।
  3. लूप ऑपरेटर्स।
  4. निष्कर्ष, ब्लॉक।
  5. विरासत।


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



टेम्पलेट में किसी भी डिजाइन को उजागर करने के लिए, विभिन्न फ़्रेमिंग प्रतीकों का उपयोग किया जाता है। विभिन्न टेम्पलेट इंजनों में, यह अलग दिखता है:

<TMPL_VAR JOB> {{ namevar }} <% if(question) { %>
      
      





उन लोगों के चयन का विषय विशेष ध्यान देने योग्य है, और विचलित नहीं होने के लिए, हम एक चीज का चयन करेंगे

 %   %
      
      







1. चर।



सबसे अधिक इस्तेमाल किया जाने वाला डिज़ाइन। साधारण कॉल के अलावा, बहुत कम अक्सर, लेकिन नेस्टेड चर के मूल्य को संदर्भित करने की आवश्यकता है। यहां तक ​​कि कम अक्सर, जब एक चर का मूल्य दूसरे चर में निहित होता है। नेस्टेड तत्व या तो एरेज़ या हैश हो सकते हैं। ठीक है, अब वर्णित स्थितियों के सभी संभावित संयोजनों की कल्पना करें।

जावास्क्रिप्ट:

 var data = { title: "  ", img : { src: "/img/picture.jpg" }, list : [ '', '', '', '' ], namevar : "theme", noname: { theme : "  " } };
      
      





टेम्पलेट:

 % title % // data.title % img.src % // data.img.src % list.3 % // data.list[3] % noname[ namevar ] % // data.noname[ data.namevar ]
      
      







समस्याएं। एक सुंदर जावास्क्रिप्ट दृश्य प्रविष्टि में

 data.list.12 == data['list']['12']; // 
      
      





किसी ऐरे तत्व या हैश तत्व से मेल कर सकते हैं। अधिकांश सर्वर भाषाएँ ऐसी संपत्ति का दावा नहीं कर सकती हैं। इस संभावना को छोड़कर, या तत्व के प्रकार पर जांच करें? यह प्रदर्शन को कैसे प्रभावित करेगा?

संभवतः, चर प्रकारों के लिए सिगिल की परिभाषा उपयोगी हो सकती है (कॉन्फ़िगरेशन, सेवा चर, मानक चर से चर)।



2. सशर्त संचालक।



दो सवाल हैं, क्या मुझे ऑपरेटर का उपयोग करना चाहिए? और वैध तार्किक ऑपरेटरों की सूची को परिभाषित करें।

  1. एक तरफ, जब तक कि बयान को नकार के साथ बदलने के लिए आसान नहीं है। यह तर्क दिया जा सकता है कि यह एक झंझट है, भले ही यह एक छोटा है। दूसरी ओर, यह माना जाता है कि ट्रिमिंग (? उदाहरण के लिए जावास्क्रिप्ट में ऐसा कोई ऑपरेटर नहीं है) कार्यक्षमता।
  2. अधिकांश तार्किक ऑपरेटरों को किसी भी तरह सभी प्रोग्रामिंग भाषाओं द्वारा समर्थित किया जाता है। लेकिन, चूंकि ऑपरेटरों का ठोस बयान भाषा से भाषा में भिन्न होता है, इसलिए यह स्पष्ट हो जाता है कि किसी प्रकार के मध्यवर्ती विकल्प की आवश्यकता होती है, जिसे पार्सर वांछित में बदल देता है। एक स्थिति में नियमित अभिव्यक्तियों का उपयोग करने की आवश्यकता के द्वारा एक मध्यवर्ती संस्करण की आवश्यकता भी समर्थित है। क्या सभी पीएल के लिए नियमित अभिव्यक्ति वाक्यविन्यास समान है? निश्चित नहीं है, और कुछ मुझे बताता है कि कुछ को छोड़ना होगा।




3. साइकिल ऑपरेटर।



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

 % nameobj => source.array.data [3..5] :loop_handler %
      
      





जहाँ नेमबोज वस्तु का नाम है। आगे हम तत्व की ओर मुड़ सकते हैं:

 % nameobj.img.src %
      
      





डेटा स्रोत के लिए, किसी भी चर source.array.data के लिए पथ का उपयोग किया जा सकता है

कभी-कभी ऐसा होता है कि हमें तीसरे से पांचवें तत्व [3..5] तक सरणी के एक टुकड़े की आवश्यकता होती है।

डेटा डालने से पहले, उन्हें प्रारूपित करना आवश्यक हो सकता है; इसके लिए, एक निश्चित हैंडलर का उपयोग किया जा सकता है, जो प्रत्येक पुनरावृत्ति के दौरान निष्पादित होता है, जो वर्तमान पुनरावृत्त तत्व के लिए एक लिंक पारित किया जाता है।



4. निष्कर्ष, ब्लॉक।



बहुत बार हमें दूसरों को या अन्य टेम्प्लेट के हिस्से को टेम्पलेट में सम्मिलित करना पड़ता है। वाक्य-विन्यास को तर्क को शामिल करने की संभावना के लिए प्रदान करना चाहिए।

ब्लॉक एक ही निष्कर्ष हैं, सिवाय इसके कि वे एक अलग फाइल में नहीं हैं। तदनुसार, ब्लॉक को एक्सेस करते समय, आपको उस टेम्पलेट का नाम निर्दिष्ट करना होगा जिसमें यह स्थित है।

 % nameinclude % % nameinclude => source.data.inc % % var.for.inc => source.for.inc %
      
      





विरासत के विकल्प के रूप में उपयोगी, चर के माध्यम से समावेश का नाम निर्दिष्ट करने का अवसर देना आवश्यक है।



5. वंशानुक्रम।



ईमानदारी से, मैंने हमेशा टेम्पलेट्स में विरासत का उपयोग किए बिना किया था, लेकिन इस तरह के अवसर की आवश्यकता को समाप्त नहीं करता है, शायद। लेकिन इसे यथासंभव सरल बनाने के लिए। इसी समय, यह संभव है कि न केवल विरासत में मिले खाके से अलग-अलग ब्लॉक को फिर से परिभाषित किया जाए, बल्कि ब्लॉक को एक मौजूदा समावेशन / ब्लॉक से बदल दिया जाए। इसे एक चर के माध्यम से समावेश नाम निर्दिष्ट करके हल किया जा सकता है। हां, वास्तव में इस तरह से विरासत की समस्या हल हो गई है: सभी बदली ब्लॉकों को निष्कर्ष के रूप में निर्धारित करने के लिए, और उनके नामों का प्रबंधन करने के लिए ...



कुछ templatizators आपको सीधे YP में कोड लिखने के लिए एक टेम्पलेट में निर्माण का उपयोग करने की अनुमति देते हैं। जाहिर है, ऐसे निर्णय वे नहीं हैं जिनकी हमें आवश्यकता है।



कुछ निर्माणों पर अधिक विस्तार से विचार किए बिना यह समझना मुश्किल है कि वे किन प्रतीकों के साथ तैयार किए जाएंगे और निर्माण के अंदर चर और ऑपरेटरों के लिए क्या उपसर्ग का उपयोग किया जाएगा। उन निर्माणों की एक सूची तैयार करने के बाद जिनका हम उपयोग करने जा रहे हैं, हम वर्ण, टैग, सिगल्स बनाने पर विचार कर सकते हैं।



UPD: अगर मैं खुद को स्पष्ट रूप से व्यक्त नहीं करता तो मैं माफी चाहता हूं। तथ्य यह है कि% प्रतीक को उदाहरणों में फ़्रेमिंग वर्णों के रूप में दर्शाया गया है, केवल एक उदाहरण है। यह इसका उपयोग करने के लिए एक प्रस्ताव नहीं है, बस कुछ देने के लिए।



All Articles