Twig टेम्पलेट्स के साथ काम करना
Drupal आपको सभी टेम्पलेट्स को ओवरराइड करने की अनुमति देता है, जो HTML मार्कअप उत्पन्न करने के लिए उपयोग किए जाते हैं, ताकि आप पूरी तरह नियंत्रित कर सकें कि आपकी कस्टम थीम में आउटपुट के रूप में कौन-सा मार्कअप दिखे। पेज के हर एलिमेंट के लिए टेम्पलेट मौजूद हैं — उच्च-स्तरीय HTML से लेकर छोटे फ़ील्ड्स तक।
टेम्पलेट्स ओवरराइड करना
आप Drupal के कोर टेम्पलेट्स को ओवरराइड कर सकते हैं, अपनी थीम फ़ोल्डर में उन टेम्पलेट्स को जोड़कर जो विशिष्ट नामकरण सम्मेलनों का पालन करते हों।
टेम्पलेट्स को ओवरराइड करने के लिए आपको यह करना होगा:
1. वह टेम्पलेट ढूँढें जिसे आप ओवरराइड करना चाहते हैं।
2. उस टेम्पलेट फ़ाइल को उसकी बेस लोकेशन से अपनी थीम फ़ोल्डर में कॉपी करें।
3. (वैकल्पिक) टेम्पलेट का नाम बदलें ताकि यह नामकरण सम्मेलनों का पालन करे और केवल विशिष्ट क्षेत्रों को लक्षित करे जहाँ यह उपयोग किया जाता है।
4. टेम्पलेट को अपनी आवश्यकतानुसार संपादित करें।
जैसे ही आप टेम्पलेट फ़ाइल को अपनी थीम में कॉपी करते हैं और कैश साफ़ करते हैं, Drupal आपकी टेम्पलेट फ़ाइल का उपयोग करना शुरू कर देगा, बेस संस्करण की बजाय।
आप यह जान सकते हैं कि पेज के किसी भी हिस्से में कौन से टेम्पलेट्स उपयोग हो रहे हैं, Twig डिबगिंग टूल्स का उपयोग करके।
थीम हुक सुझाव (Theme hook suggestions)
कभी-कभी आप टेम्पलेट फ़ाइल में बदलाव करना चाहते हैं, लेकिन केवल उन स्थानों के लिए जहाँ यह उपयोग होती है। उदाहरण: केवल किसी विशेष कंटेंट टाइप के नोड्स के लिए node टेम्पलेट बदलना। Drupal का थीम लेयर आपको यह करने देता है, बशर्ते आप नामकरण सम्मेलनों का पालन करें। जब कोई article नोड रेंडर होता है, Drupal पहले node--article.html.twig ढूँढेगा और यदि वह मौजूद है, तो उसे उपयोग करेगा। यदि नहीं, तो Drupal डिफ़ॉल्ट node.html.twig उपयोग करेगा। यह प्रक्रिया, जिसके द्वारा Drupal टेम्पलेट नामों का निर्धारण करता है, “थीम सुझाव” कहलाती है।
थीम हुक सुझाव आपको आपकी थीम में लक्षित टेम्पलेट ओवरराइड्स लागू करने की अनुमति देते हैं, यदि वे विशिष्ट नामकरण सम्मेलनों का पालन करें।
कोर, मॉड्यूल्स, थीम इंजन और थीम्स सभी सुझाव प्रदान कर सकते हैं। आप हुक्स का उपयोग करके सुझाव जोड़ या बदल सकते हैं:
- hook_theme_suggestions_HOOK(array $variables)
- hook_theme_suggestions_alter(array &$suggestions, array $variables, $hook)
- hook_theme_suggestions_HOOK_alter(array &$suggestions, array $variables)
कैश पुनर्निर्माण
थीम हुक सुझावों के साथ काम करते समय यह संभव है कि Drupal नए टेम्पलेट्स की बजाय अपने कैश का उपयोग करे। यदि ऐसा हो, तो कैश साफ़ करें। कैश साफ़ करने के लिए Drupal Cache Clearing अनुभाग में बताए गए किसी भी तरीके का उपयोग करें।
मूलभूत जानकारी
आप सुझावों को नामकरण संकेत (naming hints) की तरह सोच सकते हैं, जो Drupal को सही परिस्थितियों में सही टेम्पलेट चुनने का मार्गदर्शन करते हैं।
टेम्पलेट सुझाव थीम सुझाव हुक्स द्वारा सेट किए जाते हैं और इन्हें बदला जा सकता है। ये हुक्स किसी भी मॉड्यूल या थीम को वैकल्पिक थीम फ़ंक्शन्स या टेम्पलेट सुझाव प्रदान करने और मौजूदा सुझावों को पुन: क्रमित या हटाने की अनुमति देते हैं।
Drupal कैसे path के आधार पर पेज थीम सुझाव निर्धारित करता है
यह प्रक्रिया theme_get_suggestions() फ़ंक्शन पर आधारित है:
किसी दिए गए पेज के लिए संभावित टेम्पलेट्स की सूची Drupal द्वारा theme_get_suggestions() का उपयोग करके बनाई जाती है, जिसे system_theme_suggestions_page() कॉल करता है।
Drupal में पेज का path पहले उसके घटकों में विभाजित किया जाता है। जैसा कि ऊपर उल्लेख किया गया है, Drupal path कभी भी उसके path aliases नहीं होते: हर पेज का केवल एक ही Drupal path होता है। उदाहरण: "http://www.example.com/node/1/edit" और "http://www.example.com/mysitename?q=node/1/edit" दोनों का Drupal path है node/1/edit, और इसके घटक हैं "node", 1, और "edit"।
इसके बाद प्रीफ़िक्स “page” सेट किया जाता है। फिर प्रत्येक घटक के लिए यह लॉजिक लागू होता है:
1. यदि घटक संख्या है, तो सुझाव सूची में प्रीफ़िक्स + “__%” जोड़ें।
2. चाहे घटक संख्या हो या न हो, प्रीफ़िक्स + “__” + घटक सुझाव सूची में जोड़ें।
3. यदि घटक संख्या नहीं है, तो प्रीफ़िक्स में “__” + घटक जोड़ें।
सभी घटकों पर यह प्रक्रिया लागू करने के बाद, यदि पेज होमपेज है (जैसा कि "Administration > Configuration > System > Site information" में सेट किया गया है), तो “page__front” सुझाव सूची में जोड़ दिया जाता है।
अंततः, सुझाव को फ़ाइल नाम में बदलने के लिए “__” को “-” से बदल दिया जाता है और “.html.twig” जोड़ दिया जाता है। इसलिए node/1/edit के लिए सुझाव इस प्रकार होंगे:
1. page.html.twig (हमेशा मौजूद रहता है)
2. page--node.html.twig (और प्रीफ़िक्स सेट होता है page__node)
3. page--node--%.html.twig
4. page--node--1.html.twig (प्रीफ़िक्स नहीं बदलेगा, क्योंकि घटक संख्या है)
5. page--node--edit.html.twig (और प्रीफ़िक्स सेट होगा page__node__edit)
6. page--front.html.twig (केवल अगर node/1/edit होमपेज है)
पेज रेंडर करते समय, Drupal अंतिम सुझाव से जाँच शुरू करता है। यदि वह मौजूद है, तो वही उपयोग होता है। यदि नहीं, तो सूची में अगले सुझाव को जाँचा जाता है, और इसी तरह। यदि कोई भी विशिष्ट सुझाव मौजूद नहीं है, तो page.html.twig अंतिम विकल्प के रूप में उपयोग होता है। यही कारण है कि page--front.html.twig हमेशा होमपेज को ओवरराइड करता है यदि वह मौजूद है।
Drupal 7 से अंतर
पहले, टेम्पलेट सुझाव बदलने के लिए आप $variable['theme_hook_suggestion'] और $variable['theme_hook_suggestions'] को प्रीप्रोसेस फ़ंक्शन्स में संशोधित करते थे। Drupal 8 में, मॉड्यूल्स और थीम्स अपने स्वयं के विशेष हुक्स में सुझावों को परिभाषित और संशोधित करते हैं।
अधिक जानकारी
नए थीम सुझाव हुक्स दस्तावेज़ देखें।