9.10.2. Drupal Fields API. फील्ड फॉर्मैटर: पेज पर डेटा फील्ड्स को प्रदर्शित करना।
इस लेख में हम Field Formatters पर विचार करेंगे, जो हमें फील्ड्स की डिस्प्ले को संपादित करने और पेज पर उन्हें प्रदर्शित करने की अनुमति देते हैं।
पिछले लेखों में, हमने Link फील्ड टाइप बनाया था, इस लेख में हम देखेंगे कि ये फील्ड्स पेज पर कैसे प्रदर्शित होते हैं और इसके लिए कौन सा क्लास जिम्मेदार है। प्रत्येक फील्ड जिसे आप Drupal के माध्यम से जोड़ते हैं, उसे पेज पर प्रदर्शित किया जा सकता है और पेज Manage display पर इसके सेटिंग्स को संपादित किया जा सकता है।
Format कॉलम में आप फील्ड को प्रदर्शित करने का तरीका चुन सकते हैं। यह कॉलम Field Formatter क्लासेस के माध्यम से बनता है। आइए Link मॉड्यूल से उस क्लास को देखें, जो पेज पर लिंक प्रदर्शित करता है:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
क्लास एनोटेशन यह दिखाता है कि यह फॉर्मेटर किस प्रकार के फील्ड से संबंधित है।
/**
* Plugin implementation of the 'link' formatter.
*
* @FieldFormatter(
* id = "link",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
इस फाइल में, हम मुख्य रूप से viewElements() मेथड में रुचि रखते हैं, यह मेथड पेज पर डेटा को आउटपुट करने के लिए जिम्मेदार है। ध्यान दें कि फॉर्मेटर डेटाबेस से अनुरोध नहीं भेजता है, यह डेटा को एक वेरिएबल $items से प्राप्त करता है। एंटिटी से रेंडर किया गया डेटा $items में पास किया जाता है। इस प्रकार, हमारे पास डेटा इनपुट के लिए फील्ड विजेट, डेटा स्टोरेज के लिए फील्ड स्टोरेज, और डेटा आउटपुट के लिए फील्ड फॉर्मेटर की जिम्मेदारी का विभाजन है। यह बहुत सुविधाजनक है क्योंकि आप विभिन्न स्तरों पर डेटा को कैश कर सकते हैं। उदाहरण के लिए, यदि आउटपुट या फील्ड फॉर्मेटर सेटिंग्स में कोई परिवर्तन होता है, तो नोड्स का कैश रीसेट करना बेकार होगा क्योंकि डेटा नहीं बदलता, केवल उनका आउटपुट बदलता है। यह नई कार्यक्षमता को बहस करने और जोड़ने के लिए भी सुविधाजनक है। यदि आपको केवल आउटपुट बदलने की आवश्यकता है, तो आप फील्ड टाइप के लिए नया फील्ड फॉर्मेटर जोड़ सकते हैं और अपना आउटपुट लिख सकते हैं।
इसके अलावा, LinkFormatter क्लास में settingsForm() मेथड है, जो Manage display पेज पर फॉर्मेटर को कॉन्फ़िगर करने के लिए जिम्मेदार है। Form API के माध्यम से आप फील्ड के लिए सेटिंग्स फील्ड्स जोड़ सकते हैं और फिर इन सेटिंग्स को कॉन्फ़िगरेशन में स्टोर कर सकते हैं।
Link मॉड्यूल में एक और फॉर्मेटर है:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
यह सामान्य LinkFormatter से इनहेरिट किया गया है, लेकिन एक अंतर के साथ, इस फॉर्मेटर के लिए एक अलग टेम्पलेट जोड़ा गया है:
core/modules/link/templates/link-formatter-link-separate.html.twig
इस प्रकार, फील्ड को आउटपुट करने के लिए HTML को टेम्पलेट के माध्यम से प्राप्त किया जाता है। और फॉर्मेटर केवल एक फ़ाइल $element बनाता है, जहाँ $delta के माध्यम से मल्टीपल फील्ड के प्रत्येक मान के लिए डेटा लिखा जाता है।
जैसा कि आप देख सकते हैं, Field API का उपयोग करना काफी सरल और सुविधाजनक है। अगले लेख में, हम अपना खुद का फील्ड टाइप बनाएंगे जिसमें स्टोरेज, विजेट और फॉर्मेटर शामिल होंगे।