logo

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

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

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

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

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

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

स्क्रॉल

9.11. Drupal एंटिटी API — कस्टम एंटिटी प्रकार बनाना।. Drupal Console का उपयोग करके एंटिटी प्रकार जनरेट करना।

16/10/2025, by Ivan

Menu

हम पहले ही Form API, Fields API को समझ चुके हैं और जानते हैं कि Drupal में डेटा डेटाबेस में कैसे संग्रहीत होता है। अब आइए Drupal साइटों की नींव यानी Entity API को समझें।

आपने शायद देखा होगा कि फ़ील्ड्स अपने आप में मौजूद नहीं होते, बल्कि वे किसी Entity से “जुड़े” होते हैं — जैसे नोड (nodes), ब्लॉक (blocks), टैक्सोनॉमी शब्द (taxonomy terms), व्यूज़ (views) आदि। आप Bundle entities बना सकते हैं — जैसे सामग्री प्रकार (content types), ब्लॉक प्रकार (block types), टैक्सोनॉमी शब्दकोश (taxonomy vocabularies)। लेकिन अगर आपको अपनी खुद की नई एंटिटी और उसके बंडल्स बनाने की आवश्यकता है तो क्या होगा? ऐसी स्थिति में आपको नई एंटिटी बनाने के लिए Entity API की आवश्यकता होगी।

मैंने सारा कोड GitHub पर drupalbook_product मॉड्यूल में जोड़ा है। आप इस मॉड्यूल को डाउनलोड कर सकते हैं और अपनी वेबसाइट पर जोड़ सकते हैं:

https://github.com/levmyshkin/drupalbook8

नई एंटिटी प्रकार बनाना सबसे आसान है Drupal Console के माध्यम से, क्योंकि इसमें केवल एक कमांड चलानी होती है।

https://drupalconsole.com/

आपको अक्सर नई एंटिटी प्रकार बनाने की आवश्यकता नहीं होगी। अधिकांश छोटे और मध्यम आकार के प्रोजेक्ट्स contrib मॉड्यूल्स पर आधारित होते हैं, जैसे कि ऑनलाइन स्टोर के लिए Commerce मॉड्यूल:

https://www.drupal.org/project/commerce

यदि आप अपना स्वयं का प्लगइन मॉड्यूल बनाना चाहते हैं, तो हो सकता है कि आपको नई एंटिटी प्रकार बनाने की आवश्यकता पड़े। हालाँकि, अक्सर Drupal मॉड्यूल रिपॉज़िटरी में पहले से उपलब्ध कोई उपयुक्त मॉड्यूल मिल जाता है, जिसमें आपकी आवश्यकतानुसार कार्यक्षमता को जोड़ा या बढ़ाया जा सकता है।

इस लेख में हम Entity API का विश्लेषण करेंगे और अपनी खुद की Product Entity प्रकार बनाएँगे, जो एक छोटे कस्टम कैटलॉग या स्टोर की नींव के रूप में कार्य करेगी। लेकिन यदि आप वास्तव में एक पूर्ण स्टोर बनाना चाहते हैं, तो मैं दृढ़ता से अनुशंसा करता हूँ कि आप Commerce का उपयोग करें — यह आपके और आपके ग्राहकों के बहुत समय की बचत करेगा।

जब आप एक नई एंटिटी प्रकार बनाना चाहते हैं, तो प्रश्न उठता है — क्यों न एक नया “Product” सामग्री प्रकार बनाकर उसे कैटलॉग के लिए उपयोग किया जाए? हाँ, ऐसा एक छोटे कैटलॉग के लिए किया जा सकता है जहाँ Views और साधारण मूल्य या स्टॉक फ़िल्टर लगाए जाएँ। लेकिन जब उत्पादों की संख्या हज़ारों में पहुँच जाएगी, तो कंटेंट पेज पर आवश्यक उत्पाद ढूँढना असुविधाजनक हो जाएगा। प्रबंधक पृष्ठ पर article, category, color, name आदि जैसे फ़िल्टर जोड़ना चाहेगा:

/admin/content

यह अन्य सामग्री प्रकारों — जैसे समाचार (News), लेख (Articles), कार्यक्रम (Events) और पृष्ठों (Pages) — के साथ काम करने में बाधा डालेगा। इसलिए ऐसी स्थितियों में एक अलग Product Entity Type बनाई जाती है, जिसकी अपनी एडमिन पैनल और सेटिंग्स होती हैं।

अब चलिए एक अलग Product Entity Type बनाना शुरू करते हैं। लेकिन कमांड चलाने से पहले मैं दृढ़ता से सलाह दूँगा कि साइट का बैकअप बना लें — कम से कम डेटाबेस का। क्योंकि एंटिटी टाइप बनाने की प्रक्रिया में कुछ कॉन्फ़िगरेशन फाइलें डेटाबेस में लिखी जाती हैं, और यदि किसी कारण से ये कॉन्फ़िगरेशन अधूरी रह गईं, तो आपकी साइट काम करना बंद कर सकती है। इसलिए पहले बैकअप बनाना न भूलें।

अब हम एक नया मॉड्यूल बनाएँगे, जिसे आप Drupal Console के माध्यम से भी बना सकते हैं:

drupal generate:module

https://hechoendrupal.gitbooks.io/drupal-console/en/commands/generate-module.html

$ vendor/bin/drupal generate:module

 // Welcome to the Drupal module generator
 
 Enter the new module name:
 > Drupalbook Product
 
 Enter the module machine name [drupalbook_product]:
 >
 
 Enter the module Path [modules/custom]:
 >
 
 Enter module description [My Awesome Module]:
 > Products catalog
 
 Enter package name [Custom]:
 >
 
 Enter Drupal Core version [8.x]:
 >
 
 Do you want to generate a .module file? (yes/no) [yes]:
 > no
 
 Define module as feature (yes/no) [no]:
 > no
 
 Do you want to add a composer.json file to your module? (yes/no) [yes]:
 > no
 
 Would you like to add module dependencies? (yes/no) [no]:
 > no
 
 Do you want to generate a unit test class? (yes/no) [yes]:
 > no
 
 Do you want to generate a themeable template? (yes/no) [yes]:
 > no
 
 Do you want proceed with the operation? (yes/no) [yes]:
 > yes
 
Generated or updated files
 Generation path: /home/laptop/projects/drupalbook
 1 - /modules/custom/drupalbook_product/drupalbook_product.info.yml
 
 Generated lines: "5"

या बस एक मॉड्यूल मैन्युअली बनाइए जिसमें केवल यह फ़ाइल हो:

name: 'drupalbook_product'
type: module
description: 'Products catalog'
core: 8.x
package: 'Drupalbook'

अब हम Product entity type जनरेट करेंगे:

https://hechoendrupal.gitbooks.io/drupal-console/en/commands/generate-entity-content.html

$ vendor/bin/drupal generate:entity:content

 // Welcome to the Drupal Content Entity generator
 Enter the module name [admin_toolbar]:
 > drupalbook_product

 Enter the class of your new content entity [DefaultEntity]:
 > DrupalbookProductEntity

 Enter the machine name of your new content entity [drupalbook_product_entity]:
 >
 
 Enter the label of your new content entity [Drupalbook product entity]:
 > Product    
 
 Enter the base-path for the content entity routes [/admin/structure]:
 >
 
 Do you want this (content) entity to have bundles? (yes/no) [no]:
 > yes
 
 Is your entity translatable? (yes/no) [yes]:
 > yes
 
 Is your entity revisionable? (yes/no) [yes]:
 > no

अब जब मॉड्यूल जनरेट हो गया है, तो इसे सक्षम करें ताकि नई एंटिटी साइट पर दिखाई दे:

drupal console

जब एंटिटी जनरेट की जाती है, तो Drupal Console यह पूछता है कि एंटिटी का प्रकार कैसा होगा।

Enter the class of your new content entity [DefaultEntity]: यह आपकी PHP क्लास का नाम है, और नाम के अंत में Entity जोड़ना बेहतर है।

Enter the machine name of your new content entity [drupalbook_product_entity]: यह क्लास नाम से स्वतः प्रस्तावित किया जाता है — Enter दबाने पर वही नाम उपयोग हो जाएगा।

Enter the base-path for the content entity routes [/admin/structure]: इससे आपकी एंटिटी के CRUD ऑपरेशन्स के लिए एक प्रशासनिक पृष्ठ तैयार होगा:

structure drupal 8

उत्पाद पेज का प्रदर्शन अभी बहुत साधारण है, लेकिन इसे भविष्य में सुधारा जा सकता है या Views के माध्यम से कस्टम रूप से बनाया जा सकता है:

Product display

नई एंटिटी बनाने से पहले, आपको पहले उस एंटिटी प्रकार का एक bundle बनाना होगा। हमने पहले ही कहा था कि यह bundable entity होगी:

Do you want this (content) entity to have bundles? (yes/no):

इसलिए हम एक नया उत्पाद प्रकार बनाएँगे — जैसे कपड़े (Clothes):

product type

अब हमारे नए उत्पाद प्रकार के लिए हम आवश्यक फ़ील्ड्स को कॉन्फ़िगर कर सकते हैं:

product type fields

कम से कम हमें एक price फ़ील्ड की आवश्यकता होगी।

अब कुछ उत्पाद बनाएँ और डेटाबेस देखें। हमारे पास drupalbook_product_entity नाम की टेबल है जिसमें हमारे उत्पादों के UUID संग्रहीत होते हैं:

product data

इसके अलावा एक और टेबल है drupalbook_product_entity_field_data, जिसमें Properties संग्रहीत होते हैं। ये विशेष फ़ील्ड्स सीधे टेबल में स्टोर होते हैं क्योंकि ये फ़ील्ड्स — जैसे Name (Entity label, जैसे नोड का Title) — संशोधन (revision) के अनुसार नहीं बदलते।

product entity

यदि आप अतिरिक्त फ़ील्ड्स जोड़ते हैं, तो प्रत्येक फ़ील्ड के लिए दो टेबल बनाई जाएँगी, क्योंकि हमने इसे revisionable चुना था:

Is your entity revisionable? (yes/no) [yes]

मुझे लगता है कि अब आप समझ गए होंगे कि Drupal में नई एंटिटी प्रकार कैसे बनाई जाती है। अगले लेखों में हम अपने कस्टम कैटलॉग / स्टोर की क्षमताओं का विस्तार करेंगे।

मैंने सारा कोड GitHub पर drupalbook_product मॉड्यूल में जोड़ा है — आप इसे डाउनलोड कर सकते हैं और अपनी वेबसाइट पर उपयोग कर सकते हैं:

https://github.com/levmyshkin/drupalbook8