logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

.theme फ़ाइल में विशेषताओं (Attributes) की पूर्व-प्रसंस्करण और संशोधन

02/10/2025, by Ivan

Menu

Drupal 7 की तरह ही, आप प्री-प्रोसेसिंग (पूर्व-प्रसंस्करण) फ़ंक्शनों की मदद से किसी विशेष HTML आउटपुट को प्रभावित कर सकते हैं। उदाहरण के लिए, यदि आप मेन्यू में एक क्लास जोड़ना चाहते हैं और इसे PHP स्तर पर करना पसंद करते हैं, तो आप ऐसा कर सकते हैं। यह थीम से संबंधित मार्कअप को बदलने का एक अच्छा तरीका है, लेकिन यदि आप ऐसा मार्कअप बनाना चाहते हैं जो थीम पर निर्भर न हो, तो बेहतर होगा कि आप एक कस्टम मॉड्यूल लिखें।

(नोट: इस दस्तावेज़ में “mytheme” आपकी थीम का मशीन नाम है; उदाहरण के लिए, “bartik” एक थीम का मशीन नाम है।)

प्री-प्रोसेसिंग फ़ंक्शनों के साथ काम करने के लिए:

1. अपनी थीम की डायरेक्टरी में mytheme.theme नामक फ़ाइल बनाएँ या एडिट करें।

2. एक फ़ंक्शन बनाएँ, जैसे mytheme_preprocess_HOOK, जहाँ HOOK उस एलिमेंट को संदर्भित करता है जिस पर आप प्रभाव डालना चाहते हैं*

3. अपने बदलाव लिखें और सेव करें।

4. कैश को रिबिल्ड करें ताकि आपके बदलाव उपलब्ध हो सकें (यदि आपके पास drush इंस्टॉल है, तो कमांड लाइन में drush cr)।

* HOOK नाम twig टेम्पलेट नामकरण सिफ़ारिशों का पालन करते हैं। page.html.twig के लिए हुक बनाने हेतु आप mytheme_preprocess_page बनाएँगे। node--article.html.twig के लिए हुक बनाने हेतु आप mytheme_preprocess_node__article बनाएँगे (डैश को अंडरस्कोर से बदलते हुए)। हुक नाम जानने के लिए देखें — «टेम्पलेट फ़ाइलों को डिबगिंग के साथ ढूँढना»।

मान लीजिए हम आपकी साइट के सभी मेन्यू में my-menu क्लास जोड़ना चाहते हैं। यदि आपकी थीम का नाम “mytheme” है, तो आपको यह फ़ंक्शन लिखना होगा:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  // यदि कोई मौजूदा class array नहीं है, तो एक खाली array बनाएँ।
  if (!isset($variables['attributes']['class'])) {
    $variables['attributes']['class'] = [];
  }
  // किसी अन्य hook_preprocess_menu द्वारा जोड़ी गई classes के साथ मर्ज करें।
  $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-menu']);
}

यह Drupal 7 जैसा ही है और मदद करता है यदि आप किसी लक्ष्य मेन्यू को कस्टमाइज़ करना चाहते हैं।

आप $variables ऑब्जेक्ट को किसी शर्त के साथ जाँच सकते हैं ताकि पता लगाया जा सके कि आप किस मेन्यू पर काम कर रहे हैं। $variables के अंदर मौजूद एलिमेंट्स प्री-प्रोसेसिंग के बाद twig में उपलब्ध हो जाते हैं।

अब, हमारे उदाहरण को आगे बढ़ाने के लिए, मान लीजिए हम आपकी साइट के मुख्य मेन्यू (main menu) में my-main-menu क्लास जोड़ना चाहते हैं। इसके लिए फ़ंक्शन इस प्रकार होगा:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  if ($variables['menu_name'] == 'main') {
    if (!isset($variables['attributes']['class'])) {
      $variables['attributes']['class'] = [];
    }
    $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-main-menu']);  
  }
}

Drupal 7 से अंतर

अब template.php फ़ाइल नहीं है। इस फ़ाइल को mytheme.theme से बदल दिया गया है। फिर भी, यह लगभग उसी तरह कार्य करता है, जिससे हुक आउटपुट को बदल सकते हैं।

अन्य उपयोगी लिंक