9.10.1. Drupal Fields API. फील्ड विजेट: डेटा इनपुट फील्ड्स, फील्ड के लिए फॉर्म।
इस ट्यूटोरियल में हम देखेंगे कि Link मॉड्यूल का Field Widget कैसे काम करता है। यह एक समीक्षा लेख है, इसलिए यदि आप अपना Field Widget लिखना शुरू करना चाहते हैं, तो कृपया निम्नलिखित लेखों पर जाएं।
पिछले पाठ में हमने नोड्स और ब्लॉक्स के लिए Link फील्ड जोड़े थे। अब हम देखेंगे कि Link फील्ड का फॉर्म किस प्रकार से बनता है।
हम पहले ही Drupal में PHP क्लासेस के ऑटोलोडिंग से परिचित हो चुके हैं, और फील्ड्स के लिए एक WidgetBase फील्ड विजेट क्लास भी है:
core/lib/Drupal/Core/Field/WidgetBase.php
मॉड्यूल में एक नया चाइल्ड क्लास बनाकर और इसे src/Plugin/Field/FieldWidget में रखकर, यह क्लास स्वचालित रूप से कनेक्ट हो जाएगा और इसे फील्ड के लिए उपयोग किया जा सकेगा। आइए Link फील्ड के लिए विजेट क्लास देखें:
core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
क्लास एनोटेशन में वह फील्ड टाइप होता है, जिस पर यह विजेट लागू हो सकता है:
/**
* Plugin implementation of the 'link' widget.
*
* @FieldWidget(
* id = "link_default",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
इस तरह आप कस्टम मॉड्यूल में मौजूदा फील्ड्स के लिए नए फील्ड विजेट्स जोड़ सकते हैं।
अब हम formElement() मेथड पर चलते हैं, जो शायद सबसे महत्वपूर्ण विजेट मेथड में से एक है, जहां फॉर्म एलिमेंट्स को Form API के माध्यम से जोड़ा जाता है। Link विजेट में तीन एलिमेंट्स होते हैं:
$element['title']
$element['uri']
$element['attributes']
इन फील्ड्स का उपयोग नोड या ब्लॉक फॉर्म पर डेटा दर्ज करने के लिए किया जाएगा। इन फील्ड्स में वैलिडेशन भी जोड़ी जाती है क्योंकि, उदाहरण के लिए, URI फील्ड में सही URL या स्थानीय साइट पता होना चाहिए।
इसके अलावा, settingsForm() मेथड भी महत्वपूर्ण है, जो उस कस्टम फॉर्म को नियंत्रित करता है जिसे आप Manage form पेज पर देख सकते हैं:
फील्ड विजेट में सभी अन्य मेथड्स वैकल्पिक हैं। हम प्रत्येक मेथड के बारे में विस्तार से नहीं जाएंगे क्योंकि इन्हें कस्टम मॉड्यूल लिखने के लिए आवश्यक नहीं है। यदि आप कॉन्ट्रिब्यूटर मॉड्यूल लिखेंगे, तो मुझे लगता है कि आपको पेरेंट क्लास मेथड्स का विवरण पढ़ने में कोई कठिनाई नहीं होगी:
core/lib/Drupal/Core/Field/WidgetBase.php
फील्ड्स के लिए सभी Field Widgets प्रत्येक बंडल एंटिटी के लिए Manage form display टैब पर कॉन्फ़िगर किए जाते हैं: