logo

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

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

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

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

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

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

स्क्रॉल
02/10/2025, by Ivan

Menu

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

सब-थीम बनाने के लिए, उसे किसी अन्य थीम की तरह ही परिभाषित करें और «base theme» कुंजी का उपयोग करके उसकी बेस थीम घोषित करें। (ध्यान दें कि इस कुंजी में अंडरस्कोर नहीं होता।)

सब-थीम का उदाहरण: Fluffiness

Fluffiness — एक सब-थीम का उदाहरण है, जो Classy को बेस थीम के रूप में उपयोग करती है

इसमें आपको यह फ़ोल्डर संरचना मिलेगी:

themes/
└──  fluffiness/
     ├── fluffiness.info.yml
     └── fluffiness.libraries.yml

जानकारी वाली फ़ाइल का नाम है fluffiness.info.yml:

name: Fluffiness
type: theme
description: This is a fluffy sub theme of Classy
core: 8.x
# बेस थीम को परिभाषित करता है
base theme: classy
# लाइब्रेरी ग्रुप को परिभाषित करता है जिसमें हम css/js जोड़ सकते हैं।
libraries:
  - fluffiness/global-styling
# क्षेत्र (Regions)
regions:
  header: Header
  featured: Featured
  content: Content
  sidebar_first: First sidebar
  sidebar_second: Second sidebar
  footer: Footer

fluffiness.libraries.yml फ़ाइल शामिल करें ताकि आप ऊपर परिभाषित global-styling समूह में css/js जोड़ सकें:

global-styling:
  css:
    component:
      css/style.css: {}

और जानें: Drupal 8 थीम में CSS और JavaScript जोड़ना

यदि आप «fluffiness» की जगह कोई और नाम उपयोग करना चाहते हैं, तो हर जगह «fluffiness» को अपने नाम से बदलें (फ़ोल्डर नाम सहित)। उदाहरण:

themes/
└──  my_custom_theme/
     ├── my_custom_theme.info.yml
     └── my_custom_theme.libraries.yml

info.yml फ़ाइल में «name:» लाइन में आप कोई भी टेक्स्ट डाल सकते हैं; यह आवश्यक नहीं है कि वह आपकी सब-थीम के मशीन नाम से मेल खाए। उदाहरण:

name: My Custom Theme
# (बाकी लाइनें संक्षेप में छोड़ी गई हैं)

सब-थीम की सब-थीम

यदि आप सब-थीम की भी सब-थीम बनाना चाहते हैं, तो base theme के रूप में उस सब-थीम को ही उपयोग करना होगा।

  • Fluffiness: Classy की पहली सब-थीम
name: Fluffiness
type: theme
description: This is a fluffy sub theme of Classy
core: 8.x
# बेस थीम को परिभाषित करता है
base theme: classy
  • Shaved: Fluffiness की सब-थीम (Classy की सब-थीम की सब-थीम)
name: Shaved
type: theme
description: This is a reduced fluff sub theme of Fluffiness
core: 8.x
# बेस थीम को परिभाषित करता है
base theme: fluffiness

ध्यान दें कि base theme: पैरामीटर बेस थीम का machine name होता है, जबकि name: पैरामीटर वर्णनात्मक नाम होता है।

थीम रीजन (Regions) का इनहेरिटेंस

थीम रीजन (regions) बेस थीम से इनहेरिट नहीं होते। यदि आपकी सब-थीम की info.yml फ़ाइल में region: पैरामीटर खाली छोड़ा गया है या उसमें बेस थीम के सभी रीजन शामिल नहीं हैं, तो Drupal डिफ़ॉल्ट रीजन का उपयोग ब्लॉक्स को प्लेस करने के लिए कर सकता है। हम सिफारिश करते हैं कि अपनी बेस थीम में परिभाषित सभी रीजन को अपनी सब-थीम की info.yml फ़ाइल में कॉपी करें।

# क्योंकि रीजन इनहेरिट नहीं होते, सब-थीम में सभी रीजन परिभाषित होने चाहिए।
regions:
  header:             'Header'
  primary_menu:       'Main menu'
  secondary_menu:     'Secondary menu'
  highlighted:        'Highlighted'
  help:               'Help'
  section_nav:        'Section Nav'
  breadcrumb:         'Breadcrumb'
  page_title:         'Page Title'
  local_tasks:        'Local Tasks'
  content:            'Content (Constrained)'
  content_fullwidth:  'Content (Edge-to-edge)'
  colophon_first:     'Colophon First Col'
  colophon_second:    'Colophon Second Col'
  colophon_third:     'Colophon Third Col'
  footer:             'Footer'

ब्लॉक प्लेसमेंट का इनहेरिटेंस

Drupal 8 में थीम्स config/install/ फ़ोल्डर के साथ आ सकती हैं, जिसमें ब्लॉक्स की प्री-डिफ़ाइंड कॉन्फ़िगरेशन और उनके प्लेसमेंट शामिल होते हैं। यह कॉन्फ़िगरेशन बेस थीम से इनहेरिट हो सकती है। लेकिन यदि आपकी सब-थीम की info.yml फ़ाइल में परिभाषित रीजन बेस थीम में उपलब्ध रीजन से मेल नहीं खाते, तो ब्लॉक्स का अनिश्चित या गलत प्लेसमेंट हो सकता है।

ब्लॉक टेम्पलेट्स का इनहेरिटेंस

यदि विस्तारित की जा रही थीम में कस्टम ब्लॉक टेम्पलेट्स हैं, तो वे सीधे इनहेरिट नहीं होंगे, क्योंकि सब-थीम पैरेंट थीम के ब्लॉक्स की कॉपी बनाती है और उन्हें अपने प्रीफ़िक्स के साथ रीनेम कर देती है। Twig ब्लॉक टेम्पलेट्स ब्लॉक के नाम से प्राप्त होते हैं, इसलिए यह उनके लिंक को तोड़ देता है। इस समस्या को ठीक करने के लिए सब-थीम में हुक का उपयोग करना पड़ता है। ऊपर दिए गए उदाहरणों के अनुसार, हम सब-थीम डायरेक्टरी में shaved.theme नामक फ़ाइल बनाएँगे और उसमें यह हुक डालेंगे:

/**
 * Implements hook_theme_suggestions_HOOK_alter for blocks.
 */
function shaved_theme_suggestions_block_alter(&$suggestions, $variables) {

  // पैरेंट थीम से ब्लॉक्स के लिए थीम सुझाव लोड करें।
  foreach ($suggestions as &$suggestion) {
    $suggestion = str_replace('shaved_', 'fluffiness_', $suggestion);
  }
}

अपनी खुद की सब-थीम्स के लिए «shaved» को अपनी सब-थीम के नाम से और «fluffiness» को अपनी बेस थीम के नाम से बदलें।

Drupal 7 से अंतर

Drupal 7 की तुलना में सबसे बड़ा अंतर यह है कि .info फ़ाइलें अब .info.yml फ़ाइलें हैं, जो YAML सिंटैक्स का उपयोग करती हैं।