निर्देश: Drupal Twig रूपांतरण (tpl.php से html.twig)
यह दस्तावेज़ Drupal 8 के लिए Twig रूपांतरण प्रक्रिया के अधिकांश हिस्से के दौरान उपयोग किया गया था और आपके लिए भी उपयोगी हो सकता है जब आप अपनी स्वयं की थीम और मॉड्यूल को Drupal 8 में Twig टेम्पलेट इंजन का उपयोग करने के लिए अपडेट करते हैं।
नोट: अब Twig से संबंधित सभी काम Drupal कोर इश्यू क्यू में किया जाता है। केवल Twig रूपांतरण सैंडबॉक्स का उपयोग पहले से रूपांतरित टेम्पलेट्स और फंक्शंस खोजने के लिए करें।
मुख्य योगदानकर्ताओं के लिए चरण:
- मुख्य समस्याएं खोजें, पैच प्रकाशित और समीक्षा करने के लिए।
- सैंडबॉक्स पर पैच लागू न करें
- सैंडबॉक्स के लिए पैच न बनाएं।
- सैंडबॉक्स का उपयोग केवल परीक्षण और/या पहले से रूपांतरित कोड प्राप्त करने के लिए करें।
- इस प्रक्रिया का अवलोकन करने के लिए यह YouTube वीडियो देखें।
सेटअप
Clone Drupal 8.0.x:
git clone -b 8.0.x http://git.drupal.org/project/drupal.git d8
Drupal का वर्तमान वर्किंग वर्जन “d8” फोल्डर में इंस्टॉल होगा (आप इसे जैसा चाहें नाम दें)
1. Drupal को सामान्य रूप से इंस्टॉल करें (स्टैंडर्ड इंस्टॉलेशन प्रोफाइल का उपयोग करके)।
2. services.yml में सभी 3 Twig पैरामीटर्स (debugging, cache, auto_reload) को True पर सेट करें।
रूपांतरण
थीम फ़ंक्शंस
थीम फ़ंक्शन को एक टेम्पलेट फ़ाइल और प्रीप्रोसेस फ़ंक्शन में रूपांतरित करें:
1. उस फ़ाइल की पहचान करें, जहां से आपका थीम फ़ंक्शन आया है (theme.inc? Core/modules/color/?)
2. अपनी थीम फ़ंक्शन के लिए X.html.twig नामक टेम्पलेट फ़ाइल बनाएं:
- अपनी नई फ़ाइल का उचित नाम रखें
- अपनी फ़ंक्शन से theme_ हटाएं और फ़ाइल का नाम .html.twig से समाप्त करें
- अंडरस्कोर (“_”) को डैश (“-”) में बदलें।
- उदाहरण:
* theme_link() बन जाएगा link.html.twig
* theme_user_signature() बन जाएगा user-signature.html.twig
3. अपनी नई Twig टेम्पलेट फ़ाइल को पूरी थीम की templates फोल्डर (सैंडबॉक्स में) में रखें:
- उन फ़ंक्शंस के लिए जो किसी विशेष मॉड्यूल से आते हैं, जैसे stark/templates/comment आदि।
- उन फ़ंक्शंस के लिए जो theme.inc से आते हैं, stark/templates/theme.inc
- उन फ़ंक्शंस के लिए जो form.inc से आते हैं, stark/templates/form.inc
4. Drupal 8 API दस्तावेज़ में जाएं और अपनी फ़ंक्शन खोजें।
- (सभी फ़ंक्शंस के लिंक इस स्प्रेडशीट में हैं)
5. फ़ाइल के शीर्ष पर PHP स्टाइल का डॉकब्लॉक जोड़ें और उसे Twig टिप्पणियों {# #} में लपेटें
- सबसे ऊपर @file लाइन जोड़ें।
- @file लाइन के नीचे फ़ंक्शन परिभाषा कॉपी करें। “Returns HTML …” को “डिफ़ॉल्ट थीम इम्प्लीमेंटेशन …” में पुनर्लेखित करें। इसे एक लाइन में रखें।
- “Available variables:” लाइन जोड़ें ( @param वेरिएबल्स को बदलें )
- api.drupal.org के “Parameters” सेक्शन से वेरिएबल्स कॉपी करें
- यदि मौजूद है तो @see template_preprocess() लाइन हटा दें।
- @see template_preprocess_THEME_HOOK() लाइन जोड़ें।
- @ingroup थीम लाइन जोड़ें (नीचे दिए गए डॉकब्लॉक उदाहरण को देखें)।
6. डॉकब्लॉक के नीचे अपनी फ़ंक्शन का सोर्स कोड कॉपी करें (उदाहरण देखें)
7. PHP कोड को मुख्य रूप से HTML और प्रिंट स्टेटमेंट्स में बदलें
- HTML से PHP कोड हटाएं, उदाहरण:
* function whatever() {
* // …
* return $output; }
- PHP प्रिंट स्टेटमेंट्स हटाएं और उन्हें {{ }} से बदलें
* $variables को सरल नामों में बदलें: $variable['title'] बन जाएगा {{ title }}
* एरे सिंटैक्स को डॉट सिंटैक्स में बदलें: $variable['page']['tabs'] बन जाएगा {{ page.tabs }}
- PHP लॉजिक को हटाएं और Twig ब्रेसेस {%%} का उपयोग करें।
* <?php foreach $items as $item?> बन जाएगा {% for item in items %}
- PHP टिप्पणियों को Twig टिप्पणियों {# #} से बदलें
- t() फ़ंक्शंस को t फ़िल्टर में बदलें: {{ 'text in quotes'|t }}
- सभी PHP लॉजिक को वेरिएबल्स के लिए प्रीप्रोसेस फ़ंक्शन में स्थानांतरित करें (नीचे देखें)।
8. यदि आपको सुधार के अवसर दिखें, जैसे समान टेम्पलेट्स को मर्ज करना, मार्कअप या वेरिएबल नामों को सुधारना, तो इसे स्प्रेडशीट में नोट करें या हमारी सैंडबॉक्स में इश्यू बनाएं। उदाहरण: http://drupal.org/node/180591
प्रीप्रोसेस फ़ंक्शंस में रूपांतरण या मर्जिंग
नोट:
- सभी थीम फ़ंक्शंस को प्रीप्रोसेस फ़ंक्शंस से बदला जाएगा।
- यदि आपके टेम्पलेट फ़ाइल में PHP लॉजिक है जो प्रिंटेड वेरिएबल्स को प्रभावित करता है, तो उसे प्रीप्रोसेस फ़ंक्शन में स्थानांतरित करना होगा।
- यदि आपका टेम्पलेट एक थीम फ़ंक्शन के रूप में शुरू हुआ था, तो उसे प्रीप्रोसेस फ़ंक्शन में बदलना होगा।
- यदि कुछ थीम फ़ंक्शंस के पहले से प्रीप्रोसेस फ़ंक्शंस मौजूद हैं, तो उनमें वेरिएबल प्रोसेसिंग कोड को वहीं स्थानांतरित करें।
- hook_theme में लाइन न जोड़ें जो Drupal को बताए कि थीम फ़ंक्शन की जगह टेम्पलेट फ़ाइल का उपयोग करें।
निर्देश:
- theme_YOURFUNCTION का नाम बदलकर template_preprocess_YOURFUNCTION करें।
- $variables को रेफरेंस से पास करें (यानी & जोड़ें)। उदाहरण: theme_select($variable) बन जाएगा template_preprocess_select(&$variable)।
- फ़ंक्शन को केवल वेरिएबल प्रोसेसिंग लॉजिक के लिए एडिट करें; कोई भी मार्कअप हटा दें।
यदि आपके Twig टेम्पलेट्स में फ़ंक्शंस गायब हैं…
यदि आपको Twig टेम्पलेट में किसी फ़िल्टर या फ़ंक्शन की आवश्यकता है जो अभी उपलब्ध नहीं है, तो उसे इस ओपन इश्यू में जोड़ें। ध्यान रखें, अधिकांश PHP या Drupal फ़ंक्शंस को प्रीप्रोसेस फ़ंक्शंस में स्थानांतरित किया जाना चाहिए। केवल वे फ़ंक्शंस जो थीम डेवलपर को चाहिए होंगे, उन्हें टेम्पलेट में रहने दें।
सरल रूपांतरण उदाहरण (theme_link)
PHP कोड
function theme_link($variables) { return '' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . ''; }
Twig टेम्पलेट (फ़ाइल नाम: link.html.twig)
{# /** * @file * लिंक दिखाने के लिए डिफ़ॉल्ट थीम इम्प्लीमेंटेशन। * * उपलब्ध वेरिएबल्स: * - text: एंकर टैग के लिए लिंक टेक्स्ट। * - url: पूरी लिंक की गई URL, जैसे "/node/34" या "http://example.com/foo"। * - attributes: HTML एट्रिब्यूट्स। * * @see template_preprocess_link() * * @ingroup themeable */ #} <a href="{{ url }}" class="{{ attributes.class }}"{{ attributes }}>{{ text }}</a>
system.module में बदलाव (प्रीप्रोसेस फ़ंक्शन)
/** * लिंक टेम्पलेट्स के लिए वेरिएबल्स तैयार करता है। * * डिफ़ॉल्ट टेम्पलेट: link.html.twig. * * @param array $variables * एक एसोसिएटिव ऐरे जिसमें शामिल है: * - text: एंकर टैग के लिए अनुवादित लिंक टेक्स्ट। * - path: आंतरिक पाथ या बाहरी URL। * - options: अतिरिक्त विकल्पों का एसोसिएटिव ऐरे। */ function template_preprocess_link(&$variables) { $variables['url'] = url($variables['path'], $variables['options']); }
टिप्पणियां:
Андрей Поданенко: http://drupal.org/node/1783130 वेरिएबल्स का नाम कैसे बदलें
jen: Twig टिप्पणियों {# और #} का उपयोग करके अपने स्वयं के टिप्पणी मार्कर्स जोड़ें।
jen: Twig टिप्पणियों के साथ PHP doxygen मार्कर्स का पालन करें।
jen: api.drupal.org से परिभाषा कॉपी-पेस्ट करें
James Wilson: “Returns HTML …” को “डिफ़ॉल्ट थीम इम्प्लीमेंटेशन …” में पुनर्लेखित करें
jen: api.drupal.org से “Parameters” कॉपी-पेस्ट करें
James Wilson: वेरिएबल नामों से डॉलर साइन हटाएं; यदि डॉकब्लॉक में दूसरे वेरिएबल का संदर्भ चाहिए, तो उसे सिंगल कोट्स में डालें। [नीति चर्चा देखें http://drupal.org/node/1804710]
jen: वेरिएबल्स को Twig में {{ }} सिंटैक्स के साथ “प्रिंट” करें
jen: attributes को डॉट नोटेशन से एक्सेस करें
jen: url() जैसी अधिकांश फ़ंक्शंस को टेम्पलेट से हटाएं और प्रीप्रोसेस में डालें।