logo

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

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

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

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

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

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

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

Menu

यह ट्यूटोरियल मूल रूप से Web Wash पर प्रकाशित किया गया था। हालाँकि, Berdir ने पूछा कि क्या मैं इसे यहाँ साझा कर सकता हूँ, तो लीजिए यह यहाँ है।

Drupal 7 में एक मॉड्यूल है जो कोड स्निपेट्स को फील्ड में स्टोर करने की अनुमति देता है। इसमें एक कस्टम फील्ड होता है जिसका नाम है "Snippets Field" और यह तीन फॉर्म एलिमेंट्स दिखाता है: विवरण (description), सोर्स कोड और सिंटैक्स हाइलाइटिंग मोड (कौन-सी प्रोग्रामिंग लैंग्वेज)।

लेकिन अब समय है इस मॉड्यूल को Drupal 8 में अपडेट करने का।

इस पाठ में मैं आपको दिखाऊँगा कि मैंने Drupal 8 में एक "बेसिक" कस्टम फील्ड कैसे बनाया। मैं PSR-4, एनोटेशन्स या प्लगइन्स के बारे में गहराई से चर्चा नहीं करूँगा, वरना यह ट्यूटोरियल बहुत लंबा हो जाएगा।

इसके बजाय मैं अन्य साइट्स के लिंक दूँगा जो इन अवधारणाओं को विस्तार से समझाते हैं।

अगर आप Drupal 8 में Field API की विस्तृत डाक्यूमेंटेशन चाहते हैं, तो इन सीरीज़ को देखें:

Drupal 8 में फील्ड्स Drupal 7 की तरह hooks से नहीं बनते। इसके बजाय इन्हें Drupal 8 के नए Plugin API का उपयोग करके बनाया जाता है। यानी कि hooks को इम्प्लीमेंट करने की जगह हम विजेट, फॉर्मैटर और फील्ड एलिमेंट के लिए क्लास बनाते हैं। Drupal 7 के कई hooks जैसे hook_field_schema, hook_field_is_empty आदि अब क्लास मेथड्स हैं।

स्टेप 1: फील्ड एलिमेंट इम्प्लीमेंट करना

पहला कदम है फील्ड एलिमेंट क्लास को परिभाषित करना जिसका नाम होगा SnippetsItem, और यह FieldItemBase को एक्सटेंड करेगा।

1. Drupal 8 में क्लासेस PSR-4 का उपयोग करके लोड होती हैं।

इसलिए SnippetsItem क्लास को परिभाषित करने के लिए हमें SnippetsItem.php फ़ाइल बनाकर इसमें डालना होगा:
module/src/Plugin/Field/FieldType/SnippetsItem.php

/**
 * @file
 * Contains \Drupal\snippets\Plugin\Field\FieldType\SnippetsItem.
 */

namespace Drupal\snippets\Plugin\Field\FieldType;

use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\TypedData\DataDefinition;

अब इसमें namespace होगा Drupal\snippets\Plugin\Field\FieldType और हमें 3 use स्टेटमेंट जोड़ने होंगे:

  • Drupal\Core\Field\FieldItemBase
  • Drupal\Core\Field\FieldStorageDefinitionInterface
  • Drupal\Core\TypedData\DataDefinition

2. अब हमें फील्ड की डिटेल्स परिभाषित करनी होंगी जैसे कि field id, label, default widget और formatter। यह Drupal 7 के hook_field_info के बराबर है।

Drupal 8 में लगभग सभी informational hooks को annotations से बदल दिया गया है।

/**
 * Plugin implementation of the 'snippets' field type.
 *
 * @FieldType(
 *   id = "snippets_code",
 *   label = @Translation("Snippets field"),
 *   description = @Translation("This field stores code snippets in the database."),
 *   default_widget = "snippets_default",
 *   default_formatter = "snippets_default"
 * )
 */
class SnippetsItem extends FieldItemBase { }

यानि अब हम hook_field_info की जगह annotation का उपयोग करेंगे।

ध्यान रहे कि default_widget और default_formatter को उनके annotation IDs से संदर्भित करना होगा, न कि क्लास नाम से।

स्टेप 2: फील्ड विजेट बनाना

अब हमें फील्ड विजेट बनाना है। इसके लिए हम SnippetsDefaultWidget नामक क्लास बनाएँगे जो WidgetBase को एक्सटेंड करेगा।

फ़ाइल: module/src/Plugin/Field/FieldWidget/SnippetsDefaultWidget.php

/**
 * Plugin implementation of the 'snippets_default' widget.
 *
 * @FieldWidget(
 *   id = "snippets_default",
 *   label = @Translation("Snippets default"),
 *   field_types = {
 *     "snippets_code"
 *   }
 * )
 */
class SnippetsDefaultWidget extends WidgetBase { }

और इस विजेट में formElement() मेथड जोड़कर फॉर्म को परिभाषित करेंगे। यह Drupal 7 के hook_field_widget_form के बराबर है।

स्टेप 3: फील्ड फॉर्मैटर बनाना

आखिर में हमें फील्ड फॉर्मैटर बनाना होगा। इसके लिए हम SnippetsDefaultFormatter नामक क्लास बनाएँगे जो FormatterBase को एक्सटेंड करेगा।

/**
 * Plugin implementation of the 'snippets_default' formatter.
 *
 * @FieldFormatter(
 *   id = "snippets_default",
 *   label = @Translation("Snippets default"),
 *   field_types = {
 *     "snippets_code"
 *   }
 * )
 */
class SnippetsDefaultFormatter extends FormatterBase { }

इसमें viewElements() मेथड जोड़ा जाएगा, जो Drupal 7 के hook_field_formatter_view के बराबर है।

निष्कर्ष

जैसा पहले बताया गया, Drupal 8 में सबसे बड़ा बदलाव यही है कि फील्ड्स अब Plugin API से बनाए जाते हैं, न कि hooks से। एक बार यह समझने के बाद, Drupal 7 और 8 में फील्ड बनाने की प्रक्रिया बहुत हद तक मिलती-जुलती लगती है।

अगर आप Snippets मॉड्यूल आज़माना चाहते हैं, तो इसका 8.x-dev वर्शन डाउनलोड करें और ट्राय करें।