फ़ील्ड विगेट्स तत्व क्यों नहीं बनाते हैं?


11

प्रपत्र तत्व अक्सर फ़ील्ड विजेट से अलग होते हैं, फिर भी वे बहुत समान कार्यक्षमता लागू करते हैं।

कभी-कभी, उनकी कार्यक्षमता भी दो एप्स में रेंगती है, जैसे कि इस प्रश्न में: क्या एक कार्य क्षेत्र विजेट फॉर्म को अपने दम पर प्रदर्शित करना है?

यह मेरे लिए तर्कसंगत लगता है कि एक फ़ील्ड विजेट एक फार्म तत्व हो सकता है, यह सीधे कुछ अंतर्निहित भंडारण के लिए मैप करने के लिए भी होता है, खासकर जब से फील्ड एपी के बारे में आया था तब से फॉर्म एफी पहले से ही था।

मैं सोच रहा हूं कि ऐसा क्यों नहीं है।

संपादित करें: के रूप में, नीचे kiamlaluno द्वारा बताया आधिकारिक डॉक्स के अनुसार, विगेट्स हैं फार्म एपीआई तत्व है, जो साधन मैं संपादित करने के लिए मेरे सवाल का एक छोटा सा की आवश्यकता है।

मैं इस बारे में सोचकर आया था, क्योंकि मैं एक कोर तत्व के रूप में कोर टैगिंग विजेट का उपयोग करना चाहता था। मेरे ज्ञान का सबसे अच्छा करने के लिए हालांकि, ऐसा करने का कोई आसान तरीका नहीं है। डॉक्स का दावा करने के बावजूद विगेट्स एलीमेंट हैं, जो जरूरी नहीं लगता कि सच है।

यदि एक विजेट के रूप में घोषित किया गया था

function hook_widget_info() {
  return array('my_widget' => array(
    'base element' => 'some_form_element_machine_name',
  ))
}

तब तत्व की परिभाषा विजेट से अलग होगी, ताकि इसका उपयोग दोनों तरीकों से किया जा सके, लेकिन वर्तमान में ऐसा नहीं है।

संपादन 2: फ़ीचर अनुरोध खोला गया


Drupal 8 में, विगेट्स अब कक्षाओं के साथ कार्यान्वित किए जाते हैं; बेस विजेट मूल रूप से वह वर्ग है, जहां से विजेट क्लास ली जाती है।
किमललुनो

इसी तरह के सवाल "टैक्सी एक कार क्यों नहीं है?" या "डामर का एक टुकड़ा सड़क क्यों नहीं है?" या "पुस्तक उपन्यास क्यों नहीं है?"। एक किताब एक उपन्यास हो सकती है, लेकिन वही उपन्यास डिजिटल स्टोरेज पर भी मौजूद हो सकता है। या यह अन्य उपन्यासों के साथ एक बड़ी पुस्तक में रह सकता है। एक पुस्तक, भले ही उसमें एक उपन्यास हो, कुछ भौतिक गुण होते हैं जो उसकी सामग्री से स्वतंत्र होते हैं।
22

जवाबों:


11

यह मेरे लिए तर्कसंगत लगता है कि एक फ़ील्ड विजेट एक तत्व तत्व हो सकता है, यह भी कुछ अंतर्निहित भंडारण के लिए सीधे मैप करने के लिए होता है

विजेट रूप तत्व हैं; उनके पास अतिरिक्त क्षमताएं हैं, एक फार्म तत्व नहीं है। फ़ील्ड विजेट एपीआई के बारे में प्रलेखन निम्नलिखित शब्दों का उपयोग करते हुए विजेट का वर्णन करता है:

विजेट अतिरिक्त प्रसंस्करण क्षमताओं के साथ फॉर्म एपीआई तत्व हैं। फ़ील्ड हुक को आमतौर पर फ़ील्ड अटैच एपीआई द्वारा फ़ील्ड_ संरचना के निर्माण के दौरान कहा जाता है ।

प्रत्येक विजेट को कम से कम एक फार्म तत्व का उपयोग करके कार्यान्वित किया जाता है, लेकिन विजेट को लागू करने वाले मॉड्यूल को कुछ हुक लागू करने की आवश्यकता होती है जो एक फार्म तत्व से आवश्यक नहीं होते हैं:

जबकि पहले को हुक_लेमेंट_इनफो () के बराबर माना जा सकता है , अन्य दो विगेट्स काम करने के लिए आवश्यक अतिरिक्त हुक हैं। यह उस जानकारी के लिए धन्यवाद है hook_field_widget_form()जो एक विजेट प्रदान की गई है।

ड्रुपल लागू किए गए गुणों का विस्तार करने वाले विजेट लागू कर सकता था hook_element_info(), लेकिन सच्चाई यह है कि एक विजेट और एक फार्म तत्व दो अलग-अलग चीजें हैं जो विभिन्न मामलों में उपयोग की जाती हैं; एक विजेट को और अधिक विशिष्ट प्रकार के फार्म तत्व पर विचार करें।
यदि hook_element_info()विगेट्स के बारे में जानकारी वापस करने के लिए भी उपयोग किया गया था, तो विजेट की जानकारी रखने के लिए विजेट की तलाश करने वाले कोड को फॉर्म तत्वों को फ़िल्टर करना होगा; इसके विपरीत, प्रपत्र तत्वों की तलाश करने वाले कोड को विजेट जानकारी को फ़िल्टर करना चाहिए। उस जानकारी की आवश्यकता को ध्यान में रखते हुए, इस कारण दो अलग-अलग हुक आवश्यक हैं।

द्रुपाल एक "आधार तत्व" संपत्ति का इस्तेमाल कर सकता था, जो उससे लौटा था hook_field_widget_info()। यदि ऐसी संपत्ति को लागू नहीं किया गया है, तो इसका मतलब है कि किसी ने इसे प्रस्तावित नहीं किया है, या इसे प्रस्तावित किया गया है, लेकिन यह कुछ सीमित मामलों में उपयोगी होने के लिए किया गया है।

ड्रुपल 8 के लिए, चीजें थोड़ी बदल गईं, और फार्म तत्व कक्षाओं को लागू करने की वस्तु हैं FormElementInterface, जबकि फील्ड विजेट कक्षाओं को लागू करने की वस्तु हैं WidgetInterface। इंटरफ़ेस जो उन इंटरफेस के बीच आम है PluginInspectionInterface, जो किसी तत्व तत्व के प्रतिपादन के लिए किसी भी विधि को परिभाषित नहीं करता है , जो इसके बजाय RenderElementएक सार वर्ग से परिभाषित होते हैं ।
चूंकि अब विगेट्स कक्षाओं के साथ लागू होते हैं, बेस विजेट मूल रूप से बेस क्लास होता है जिसमें से विजेट क्लास ली जाती है; एक विजेट के आधार विजेट को परिभाषित करने के लिए एक संपत्ति की आवश्यकता नहीं है।


बहुत दिलचस्प है, मुझे यह नहीं पता था। +1। हालाँकि मैंने अपने प्रश्न को अपडेट कर दिया है, जैसा कि आपने मुझे और भ्रमित कर दिया है;)
लेटेरियन

सुविधा अनुरोध खोला गया । :)
Letharion
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.