Unit_metadata_wrapper () फ़ंक्शन का उद्देश्य क्या है, और मुझे इसका उपयोग क्यों करना चाहिए?


23

मुझे लगता है कि इस समय एंटिटी एपीआई का उपयोग करने वाले बहुत सारे मॉड्यूल में ऐड-ऑन का विकास हो रहा है , और entity_metadata_wrapper()फ़ंक्शन पॉप अप होता रहता है।

डॉक्स पेज इसके बारे में इस का कहना है:

दिए गए डेटा के लिए एक संपत्ति आवरण देता है।

यदि किसी इकाई को लपेटा जाता है, तो आवरण का उपयोग एंटाइटेलिटी गुणों के लिए आगे के रैपर को पुनः प्राप्त करने के लिए किया जा सकता है।

वहाँ शब्द 'इकाई' की शानदार फ्रायडियन वर्तनी की उपेक्षा करते हुए, मैं वास्तव में यह नहीं समझता कि इन रैपरों का उद्देश्य क्या है।

मैं समझता हूं कि फ़ंक्शन अनिवार्य रूप से एक EntityDrupalWrapperवर्ग देता है :

रैपर इकाई गुण के गेटटर और सेटर कॉलबैक को लागू करने में आसानी करता है

लेकिन जो मैं समझ नहीं पा रहा हूं वह यह है कि यह कैसे चीजों को आसान बनाता है।

उदाहरण के लिए, एक नोड की स्थिति संपत्ति को अद्यतन करने के लिए मैं इस कोड का उपयोग कर सकता हूं:

$node = node_load($nid);
$node->status = 1;
node_save($node);

यह बहुत साफ है। जैसा कि मैं इसे समझता हूं (लेकिन गलत हो सकता है) समान कोड का उपयोग करने की entity_metadata_wrapper()तुलना में अधिक क्रिया होगी।

मुझे यकीन नहीं है कि यह केवल 'रैपर' शब्द का उपयोग है जो मुझे यहां ट्रिपिंग कर रहा है, लेकिन मैंने एंटिटी मॉड्यूल में भी कोड के माध्यम से देखा है और मैं वास्तव में इसे समझने के करीब नहीं हूं।

क्या कोई यह समझाने में सक्षम है कि इस फ़ंक्शन का उपयोग करने के क्या फायदे हैं, और शायद एक सामान्य उपयोग के मामले के लिए एक सरल कोड उदाहरण प्रदान करता है?


यह इकाई एपीआई और रैपर के लिए एक गहरी समझ जोड़ सकता है। यह फागो, एंटिटी के एक आदमी की बात है। wolfgangziegler.net/drupalcon-denver
Ken

धन्यवाद, यह वास्तव में खुलने वाले जुआ से उपयोगी लगता है। मैं इसे जब मैं कुछ समय मिल गया है पर एक नज़र दे देंगे
क्लाइव

उस "वीडियो को ब्लिप से हटा दिया गया है" लेकिन स्लाइड्स अभी भी डाउनलोड हैं।
Artfulrobot

जवाबों:


23

हां, नोड की स्थिति बदलना तुच्छ है, क्योंकि यह एक हार्डकोड संपत्ति है।

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

दो उदाहरण, जो दिखाते हैं कि इकाई आवरण क्या कर सकता है:

  • निम्न पंक्ति वाणिज्य लाइन आइटम को आदेश में जोड़ती है, भाषा और वास्तविक आईडी का ध्यान रखती है, जो संदर्भ आईडी रखती है, निम्न उत्तर से लिया गया है /drupal//a/23513/31

    $order_wrapper->commerce_line_items[] = $line_item;
  • इसी तरह, भाषा, या डेल्टा की जाँच किए बिना किसी क्षेत्र के मान को सीधे एक्सेस करने में सक्षम होने के नाते, यहां तक ​​कि /drupal//a/ से सीधे संदर्भित संस्थाओं तक पहुंचने में सक्षम होने के नाते। 33010/31

    $subnode = entity_metadata_wrapper('node', $node)->field_subnode->value();
    $default = $subnode->title;

संस्था रैपर सर्च एपीआई और नियमों जैसे लचीले, शक्तिशाली मॉड्यूल के पीछे की प्रेरणा शक्ति है क्योंकि यह उन्हें कई स्तरों के संदर्भों के माध्यम से अपने तरीके से काम करने की अनुमति देता है, ताकि आप किसी उत्पाद को उपयोगकर्ता को किसी ऑर्डर में खरीदे गए क्षेत्र का उपयोग कर सकें। जैसे [commerce-order:commerce-line-items:0:commerce-product:some-field](वास्तव में सही नहीं हो सकता है, लेकिन ऐसा कुछ हो सकता है), या आपके खोज सूचकांक में संदर्भित नोड का शरीर सारांश जोड़ें।

उस ने कहा, मैं जरूरी नहीं कि रैपर के वास्तविक एपीआई का शौकीन हूं, यह विशाल आंतरिक सरणियां हैं और यहां तक ​​कि सरल गुण फिर से रैपर कक्षाएं हैं। मुझे आशा है कि Drupal 8 में बेहतर इकाई (और उम्मीद के मुताबिक क्षेत्र) प्रणाली वर्गीय संस्थाओं होने के लिए इस तरह के आवरण की आवश्यकता को हटा देगी।


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

@Berdir "मैं आवश्यक रूप से रैपर के वास्तविक एपीआई के शौकीन नहीं हूं ..." मेरी आपके जैसी ही भावनाएं हैं। क्या आप इससे निपटने के लिए कुछ भी करते हैं? मान देखने के लिए क्या आप field_view_value () का उपयोग करते हैं? आप कस्टम वर्कफ़्लो या डैशबोर्ड के लिए कस्टम कॉलबैक में मान सेट करने की अनुशंसा कैसे करेंगे?
चार्ली श्लिसेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.