डिस्प्ले मोड्स: व्यू मोड्स और फॉर्म्स
डिस्प्ले मोड्स
डिस्प्ले मोड्स (admin/structure/display-mode पर उपलब्ध) का उपयोग कंटेंट एंटिटी ऑब्जेक्ट्स को अलग-अलग तरीकों से देखने या एडिट करने के लिए किया जाता है। डिस्प्ले मोड्स के दो प्रकार होते हैं – «व्यू मोड्स» और «फॉर्म मोड्स»। ये दोनों प्रकार – व्यू मोड्स और फॉर्म मोड्स – «कन्फ़िगरेशन ऑब्जेक्ट्स» के उदाहरण हैं। यहाँ एक एक्सपोर्टेड व्यू मोड का उदाहरण है:
uuid: 15dc7aa9-13fd-4412-9c06-06d09f915d08
langcode: en
status: false
dependencies:
module:
- node
id: node.full
label: 'Full content'
targetEntityType: node
cache: true
संदर्भ: core.entity_view_mode.node.full.yml
मुख्य प्रॉपर्टी जिस पर ध्यान देना चाहिए, वह है targetEntityType। हर डिस्प्ले मोड (व्यू मोड या फॉर्म मोड) सिर्फ एक और केवल एक एंटिटी टाइप से जुड़ा होता है। परंपरा के अनुसार, लेबल्स का उपयोग कई डिस्प्ले मोड्स में किया जाता है। उदाहरण के लिए, Drupal Core का स्टैंडर्ड प्रोफाइल “Full” शब्द का उपयोग node, custom block और comment एंटिटी टाइप्स के व्यू मोड्स में करता है।
व्यू मोड्स और डिस्प्ले
- समग्र रूप से एडमिनिस्टर किया जाता है: /admin/structure/display-mode/view
- हर bundle के लिए “Custom Display Settings” में सक्षम होता है, जैसे: /admin/structure/types/manage/page/display (जहाँ “page” node entity bundle है)
- हर bundle के लिए किसी खास व्यू मोड की कॉन्फ़िगरेशन इस तरह की जाती है: /admin/structure/types/manage/page/display/teaser (जहाँ “page” node entity bundle है और “teaser” व्यू मोड है)
व्यू मोड्स Drupal 8 से पहले से मौजूद कॉन्सेप्ट हैं। ये Drupal 7 में भी थे। Drupal 6 में «Build modes» नामक कॉन्सेप्ट था। व्यू मोड्स Drupal साइट-बिल्डिंग टूल्स (जैसे Entity Reference फील्ड्स) को किसी एंटिटी को एक खास तरीके से अनुरोध (render) करने देते हैं। उदाहरण के लिए, मान लीजिए “song” और “artist” दोनों node टाइप हैं, और song में artist के लिए reference field है। song node का “Full” डिस्प्ले artist node के “Teaser” डिस्प्ले को दिखाने की मांग कर सकता है। इस उदाहरण में “Teaser” artist node के लिए व्यू मोड है और “Full” song node के लिए।
आमतौर पर, अगर साइट बिल्डर चाहता है कि artist node को teaser व्यू मोड में दिखाया जाए, तो वह artist और teaser के लिए खास कॉन्फ़िगरेशन सेट करता है। यह entity bundle की कॉन्फ़िगरेशन पेज पर “Manage Display” टैब से किया जा सकता है। Drupal Core के स्टैंडर्ड इंस्टॉलेशन प्रोफाइल में यह पेज है: /admin/structure/types/manage/article/display
इस पेज पर साइट बिल्डर bundle के लिए फील्ड डिस्प्ले (फील्ड्स का क्रम और formatter का उपयोग) के लिए कस्टम डिस्प्ले सेटिंग्स सक्षम कर सकता है। सभी व्यू मोड्स के लिए कस्टम सेटिंग्स ज़रूरी नहीं हैं। इस उदाहरण में सिर्फ “RSS” और “Teaser” व्यू मोड्स की अपनी सेटिंग्स हैं। बाकी सभी व्यू मोड्स “Default” कॉन्फ़िगरेशन का उपयोग करते हैं। एंटिटी टाइप bundle और व्यू मोड के बीच इस संबंध को “Entity View Display” कहा जाता है। @see EntityViewDisplayInterface

फॉर्म मोड्स और (फॉर्म) ऑपरेशन्स
- समग्र रूप से एडमिनिस्टर किया जाता है: /admin/structure/display-mode/form
- हर bundle के लिए सक्षम होता है: /admin/structure/types/manage/page/form-display (जहाँ “page” node entity bundle है)
- bundle के किसी खास फॉर्म मोड की कॉन्फ़िगरेशन इस तरह की जाती है: /admin/structure/types/manage/page/form-display/simple (जहाँ “page” node entity bundle है और “simple” फॉर्म मोड है)
जैसे व्यू मोड्स, वैसे ही फॉर्म मोड्स भी होते हैं। ये हमें एक ही entity bundle के लिए अलग-अलग field widget configurations बनाने की अनुमति देते हैं, वैसे ही जैसे व्यू मोड्स अलग-अलग field formatter configurations बनाने की अनुमति देते हैं।
Drupal 7 में “Manage Fields” टैब पर फील्ड और उसका widget दोनों एक साथ होते थे। अब इसे दो टैब्स में विभाजित किया गया है: “Manage Fields” और “Manage Form Display”। इससे हमें यह तय करने में अधिक लचीलापन मिलता है कि किसी भी कंटेंट टाइप के add/edit फॉर्म्स कैसे दिखेंगे। “Manage Display” टैब Drupal 7 जैसा ही रहता है। कंटेंट टाइप्स के अलावा, हम अन्य entity types (जैसे users, taxonomy, comments और custom blocks) के व्यू मोड्स भी मैनेज कर सकते हैं।
फॉर्म मोड्स के अतिरिक्त, फॉर्म ऑपरेशन्स यह निर्धारित करते हैं कि किन forms के लिए कौन से classes का उपयोग किया जाए, जैसे delete form और edit form। उदाहरण के लिए, node delete form की class node edit form की class से अलग होती है। ये ऑपरेशन्स entity annotation में डिफ़ाइन होते हैं।
यहाँ एक उदाहरण है, जो 2 custom form operations और “default” form mode, तीनों को MyEntityForm में दिखाता है। ध्यान रखें कि यह form ContentEntityForm को extend करे:
/**
* @ContentEntityType(
* id = "myentity",
* handlers = {
* "form" = {
* "default" = "Drupal\myentity\Form\MyEntityForm",
* "add" = "Drupal\myentity\Form\MyEntityForm",
* "edit" = "Drupal\myentity\Form\MyEntityForm",
* "delete" = "Drupal\myentity\Form\MyEntityDeleteForm",
* },
* },
* )
*/
अगर आपको किसी existing entity में उपलब्ध form operations जोड़ने या बदलने की ज़रूरत है, तो आप hook_entity_type_build और hook_entity_type_alter का उपयोग कर सकते हैं।
वर्तमान में, किसी form mode के लिए स्पष्ट रूप से operation कॉन्फ़िगर होना चाहिए। व्यू मोड्स के विपरीत (जो default entity view display पर fallback करते हैं), form modes default operation का उपयोग नहीं करते। इसे एक bug माना जा सकता है। देखें: #2511720: Allow form modes to use default operation if not explicitly set.
किसी custom form mode में form दिखाने के लिए, अपने route में _entity_form का उपयोग करें। उदाहरण के लिए, MyEntity entity के लिए custom “edit” form दिखाने के लिए:
entity.myentity.edit_form:
path: '/myentity/{myentity}/edit'
defaults:
_entity_form: myentity.edit
_title: 'Edit MyEntity'
requirements:
_permission: 'edit myentity entities'
एक और उदाहरण:
आम आवश्यकता होती है कि user registration forms सभी custom fields न दिखाएँ। जैसे ही user रजिस्टर हो जाता है, उसे profile edit form मिलता है जिसमें और fields होते हैं। यह एक configuration का उदाहरण है:
- /admin/config/people/account/fields से “Add field” क्लिक करें।
- अगले स्क्रीन पर “List (Text)” field type चुनें।
- label दें: “Subscription list”
- “Save and continue” क्लिक करें।
- allowed values की सूची भरें, जैसे:
1 | News
2 | Important announcements
3 | Offers, Discounts, Sales
4 | Partner messages
- Save क्लिक करें।
- इसे required field बनाइए।
- सभी चार values default रूप से चुनें और Save करें।
- इसके बाद “Manage form display” टैब क्लिक करें।
- फील्ड्स की सूची के नीचे “Custom display settings” सेक्शन मिलेगा, इसे expand करें।
- “Use custom display settings for the following form modes” में “Register” enable करें और Save करें।
- अब आपके पास “Registration” नाम का दूसरा टैब होगा।
- “Subscription list” field को disable कर दें, उसे “Disabled” सेक्शन में drag करें। Save क्लिक करें।
- “Manage display” टैब पर जाएँ और सुनिश्चित करें कि “Subscription list” field enabled है।
अब साइट से logout करें और registration form पर जाएँ। Subscription list field वहाँ नहीं दिखेगी।
लॉगिन करने के बाद यह field profile edit form में उपलब्ध होगी।