6.4. Twig — Drupal के लिए नया टेम्पलेट इंजन है।
यदि आप Stable थीम की page.html.twig टेम्पलेट फ़ाइल खोलें:
/core/themes/stable/templates/layout/page.html.twig
तो आप पाएंगे कि यह Drupal 7 की page.tpl.php टेम्पलेट से अलग है, सबसे पहले एक्सटेंशन में और दूसरे, इसमें बहुत सारे कर्ली ब्रेसेज़ {} हैं। इसका कारण यह है कि Drupal अब Twig टेम्पलेट इंजन का उपयोग करता है।
<main role="main">
<a id="main-content" tabindex="-1"></a>{# लिंक html.html.twig में है #}
<div class="layout-content">
{{ page.content }}
</div>{# /.layout-content #}
{% if page.sidebar_first %}
<aside class="layout-sidebar-first" role="complementary">
{{ page.sidebar_first }}
</aside>
{% endif %}
{% if page.sidebar_second %}
<aside class="layout-sidebar-second" role="complementary">
{{ page.sidebar_second }}
</aside>
{% endif %}
</main>
Twig टेम्पलेट में PHP का उपयोग नहीं किया जा सकता, इसलिए आपको केवल Twig के टूल्स का उपयोग करना होगा — और साइट को स्टाइल करने के लिए ये पर्याप्त हैं।
आइए समझते हैं कि Twig के साथ कैसे काम किया जाए।
Twig में वेरिएबल्स
यदि PHP में हम वेरिएबल्स के लिए $ चिह्न का उपयोग करते हैं, तो Twig में हम कर्ली ब्रेसेज़ का उपयोग करते हैं:
{{variable}}
इस प्रकार, हम दो ओपनिंग ब्रेसेज़, एक स्पेस, वेरिएबल का नाम, फिर स्पेस और दो क्लोज़िंग ब्रेसेज़ लिखते हैं। Twig में किसी वेरिएबल को आउटपुट करने के लिए print
फ़ंक्शन जोड़ने की आवश्यकता नहीं है, क्योंकि Twig टेम्पलेट्स में PHP का उपयोग नहीं होता। वेरिएबल को आउटपुट करने के लिए बस उसे डबल कर्ली ब्रेसेज़ में लिखना पर्याप्त है।
वेरिएबल ऑब्जेक्ट्स और ऐरेज़ के साथ काम करना भी आसान है। पहले जहाँ आपको यह जानना पड़ता था कि $node
एक ऑब्जेक्ट है और $form
एक ऐरे है, अब सब कुछ सरल है — हम वेरिएबल की प्रॉपर्टीज़ को डॉट (.
) के माध्यम से एक्सेस करते हैं:
{{node.id}}
हम आसानी से वेरिएबल्स बना सकते हैं:
{% set foo="bar" %}
Hi, here's my variable: {{ foo }}
ध्यान दें कि जब हम वेरिएबल सेट करते हैं, तो हम प्रतिशत चिह्न (%) का उपयोग करते हैं, और जब हम वेरिएबल प्रदर्शित करते हैं, तो हम डबल ब्रेसेज़ का उपयोग करते हैं।
हम केवल स्ट्रिंग्स ही नहीं बल्कि ऐरेज़ भी सेट कर सकते हैं:
{%
set foo_array = [
'foo',
'bar',
]
%}
Twig फ़िल्टर्स
हालाँकि Twig एक पूर्ण प्रोग्रामिंग भाषा नहीं है, लेकिन इसमें डेटा के साथ काम करने के लिए कई टूल्स हैं। सबसे महत्वपूर्ण टूल्स में से एक हैं फ़िल्टर्स। फ़िल्टर्स को |
पाइप सिंबल के साथ निर्दिष्ट किया जाता है।
{{ variable|filter }}
फ़िल्टर्स वेरिएबल के आउटपुट को बदलने की अनुमति देते हैं। उदाहरण के लिए:
{{node.title | length}}
— स्ट्रिंग की लंबाई (अक्षरों की संख्या) प्रदर्शित करता है।
{{node.title | uppercase}}
— स्ट्रिंग को बड़े अक्षरों (uppercase) में दिखाता है।
{{node.title | lowercase}}
— स्ट्रिंग को छोटे अक्षरों (lowercase) में दिखाता है।
Twig फ़िल्टर्स की पूरी सूची के लिए आधिकारिक Twig डाक्यूमेंटेशन देखें: http://twig.sensiolabs.org/doc/filters/index.html
Drupal Twig फ़िल्टर्स
Drupal Twig में अपने स्वयं के फ़िल्टर्स भी जोड़ता है, जैसे कि लाइन ब्रेक के लिए फ़िल्टर्स। पहले हम PHP में t()
फ़ंक्शन का उपयोग करते थे, लेकिन अब Twig में PHP कोड का उपयोग नहीं किया जा सकता, इसलिए हमें t()
फ़ंक्शन का विकल्प चाहिए।
उदाहरण के लिए ये फ़िल्टर्स उपयोग किए जाते हैं:
- t
- passthrough
- placeholder
- drupal_escape
- safe_json
- without
- clean_class
- clean_id
Twig पैटर्न में लाइन ट्रांसलेशन (अनुवाद)
Twig विभिन्न भाषाओं के लिए स्ट्रिंग्स का उपयोग करता है। किसी पंक्ति को अनुवाद करने के लिए {% trans %} टैग का उपयोग करें। ध्यान दें कि कंट्रोल स्ट्रक्चर प्रतिशत (%) चिन्ह से शुरू होते हैं, जिससे ये वेरिएबल्स से अलग रहते हैं।
{% trans %} Hello world {% endtrans %}
हम स्ट्रिंग्स में वेरिएबल्स भी पास कर सकते हैं:
{% trans %} Hello {{ name }} {% endtrans %}
हम वेरिएबल्स को प्रदर्शित करने से पहले फ़िल्टर्स के माध्यम से संशोधित भी कर सकते हैं:
{% set name = name|capitalize %}
{% trans %}
Hello {{ name }}!
{% endtrans %}
Twig में टिप्पणियाँ (Comments)
{# यहाँ टिप्पणी लिखें #}
If कथन
हालाँकि Twig में PHP की सभी क्षमताएँ नहीं हैं, लेकिन इसमें वेरिएबल्स और ऐरेज़ के साथ काम करने के लिए आवश्यक संरचनाएँ मौजूद हैं। उदाहरण के लिए, हम किसी वेरिएबल को प्रदर्शित करने से पहले जाँच सकते हैं कि वह मौजूद है या नहीं:
{% if site_slogan %}
<div class="site-slogan">{{ site_slogan }}</div>
{% endif %}
Twig लूप (Loop)
अक्सर टेम्पलेट्स में किसी ऐरे को दोहराकर (iterate करके) प्रत्येक आइटम प्रदर्शित करने की आवश्यकता होती है। इसके लिए Twig में हम for लूप का उपयोग करते हैं (PHP के foreach के समान):
{% for item in items %}
{{ item.content }}
{% endfor %}
हम for लूप को PHP के पारंपरिक for लूप की तरह भी उपयोग कर सकते हैं, बस थोड़ा अलग रूप में:
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
वेरिएबल | विवरण |
items.index | वर्तमान आइटम का क्रमांक (1 से शुरू) |
items.index0 | वर्तमान आइटम का क्रमांक (0 से शुरू) |
items.revindex | अंत से गिनते हुए वर्तमान आइटम का क्रमांक (1 से शुरू) |
items.revindex0 | अंत से गिनते हुए वर्तमान आइटम का क्रमांक (0 से शुरू) |
items.first | TRUE यदि यह पहला आइटम है |
items.last | TRUE यदि यह अंतिम आइटम है |
items.length | ऐरे की लंबाई |
items.parent | पैरेंट संदर्भ |
हम for else संरचना का भी उपयोग कर सकते हैं:
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>कोई उपयोगकर्ता नहीं मिला</em></li>
{% endfor %}
</ul>