Magento 2.2: क्या परिभाषा है ।map.xml फ़ाइल?


11

Magento 2.2 ने एक नई फ़ाइल प्रस्तुत की, परिभाषा .map.xml
इस फ़ाइल का उद्देश्य और उद्देश्य क्या है? ऐसा लगता है कि यह स्कीमा मानचित्र बनाने से संबंधित है Magento\Ui\Config\Converter, लेकिन GitHub नोटों में से कोई भी वास्तव में इस फाइल के इरादे की व्याख्या नहीं करता है या यह जो सामग्री है वह संप्रेषित करने के लिए है।

सामान्य जिज्ञासा के अलावा, मेरा मुख्य हित एक ट्यूटोरियल मॉड्यूल को पैच करने में है जो एम 2 में टूट गया है

जवाबों:


4

सारांश

मेरी वर्तमान उच्च-स्तरीय समझ यह है कि इसका उद्देश्य XML डेटा को (Magento 2.2) UI घटक के नोड से उसके नोड्स definition.map.xmlपर मैप<settings> करना है <argument>

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

व्याख्या

संदर्भ के लिए, UI घटक <argument>लंबे समय से नोड्स का उपयोग कर रहे हैं <settings>। विशेष रूप से, view/[area]/ui_component/etc/definition.xmlफ़ाइल या view/[area]/ui_component/[ui_component_name].xmlकॉन्फ़िगरेशन फ़ाइलों में, मानक अभ्यास में निम्न के रूप में एक XML नोड शामिल करना था:

<argument name="data" xsi:type="array">
    <item name="js_config" xsi:type="array">
        <item name="provider" xsi:type="string">oracle_order_form.oracle_order_form_data_source</item>
    </item>
    <item name="label" xsi:type="string" translate="true">Company Information</item>
    <item name="template" xsi:type="string">templates/form/collapsible</item>
</argument>

<form>यूआई कंपोनेंट को अगर विन्यास दिया जाए, तो यह व्यूह में FormPHP वर्ग के कंस्ट्रक्टर ( Magento/Ui/Component/Form.php) में पास हो जाएगा $data। अनुवाद काफी सीधा है।

हालांकि, इस संरचना ने परिभाषित एक्सएमएल की बारीक नियंत्रण या सत्यापन प्रदान नहीं किया। डेवलपर्स अपने <argument>नोड्स में जो कुछ भी चाहते थे , उसे कम से कम (एक्सएसडी सत्यापन स्तर पर) कम से कम, और उन मूल्यों को बहुत सारे परिवर्तनों के बिना PHP कोड में वापस पारित किया जा सकता था।

अमूर्त और मान्यता के स्तर को जोड़ने के लिए, Magento ने <settings>नोड पेश किया । नोड पर एक और नज़र डालना definition.map.xml:

<component name="form" include="uiElementSettings">
    <schema name="current">
        <argument name="data" xsi:type="array">
            <item name="layout" xsi:type="array">
                <item name="type" type="string" xsi:type="xpath">settings/layout/type</item>
                <item name="navContainerName" type="string" xsi:type="xpath">settings/layout/navContainerName</item>
            </item>
            <item name="config" xsi:type="array">
                <item name="selectorPrefix" type="string" xsi:type="xpath">settings/selectorPrefix</item>
                <item name="messagesClass" type="string" xsi:type="xpath">settings/messagesClass</item>
                <item name="errorClass" type="string" xsi:type="xpath">settings/errorClass</item>
                <item name="ajaxSaveType" type="string" xsi:type="xpath">settings/ajaxSaveType</item>
                <item name="namespace" type="string" xsi:type="xpath">settings/namespace</item>
                <item name="ajaxSave" type="boolean" xsi:type="xpath">settings/ajaxSave</item>
                <item name="reloadItem" type="string" xsi:type="xpath">settings/reloadItem</item>
            </item>
            <item name="buttons" type="buttons" xsi:type="converter">settings/buttons</item>
            <item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>
        </argument>
    </schema>
</component>

... एक संरचना जो पुराने <argument>पेड़ के समान दिखती है, दिखाई देने लगती है। एकमात्र अंतर यह है कि, उदाहरण के लिए, जब कोई <argument>स्टाइल का उपयोग करने के बजाय स्पिनर को एक फॉर्म में जोड़ना चाहता है :

<argument name="data" xsi:type="array">
    <item name="spinner" xsi:type="string">[My_Spinner_Name]</item>
</argument>

... कोई यह देख सकता है कि एक ही कॉन्फ़िगरेशन मान <item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>निम्न वैकल्पिक सिंटैक्स पर लाइन द्वारा मैप किया गया है :

<settings>
    <spinner>[My_Spinner_Name]</spinner>
</settings>

सतह पर, यह एब्सट्रैक्ट के पूरी तरह से वसा स्तर की तरह लगता है, एक नई फ़ाइल मैपिंग फ़ाइल में कई लाइनें जोड़कर XML के कुछ वर्णों को एक कॉन्फ़िगरेशन फ़ाइल में सहेजता है।

हालांकि, हर मैपिंग कॉपी-एंड-पेस्ट का एक साधारण मामला नहीं है। उदाहरण के लिए, ऐसा लगता है कि बटन विन्यास के लिए मानचित्रण:

<item name="buttons" type="buttons" xsi:type="converter">settings/buttons</item>

... xsi:type="converter"(के बजाय xpathऊपर स्पिनर उदाहरण की तरह है)। इस तरह की घोषणा के परिणामों को निर्धारित करना मेरी क्षमता से परे है, लेकिन निडर स्रोत कोड एक्सप्लोरर में देखना चाह सकता है Magento\Ui\Config\Converter, जिसमें इन अधिक जटिल XML कॉन्फ़िगरेशन नोड्स में कई मिलान नाम के साथ PHP कक्षाएं हैं।

XML पर प्रभाव अधिक स्पष्ट है। जबकि बटन परिभाषाओं के लिए पुराना वाक्यविन्यास होगा

<argument name="data" xsi:type="array">
    <item name="buttons" xsi:type="array">
        <item name="back" xsi:type="string">Company\Basic\Block\Adminhtml\Slides\BackButton</item>
        <item name="save" xsi:type="string">Company\Basic\Block\Adminhtml\Slides\SaveButton</item>
    </item>
</argument>

... नया कॉन्फ़िगरेशन जैसा दिखेगा:

<settings>
    <buttons>
        <button name="back" class="Company\Basic\Block\Adminhtml\Slides\BackButton"/>
        <button name="save" class="Company\Basic\Block\Adminhtml\Slides\SaveButton"/>
    </buttons>
</settings>

... और ओजस्वी रूप से मैगेंटो के Ui/ConfigPHP रूपांतरण कोड से गुजरने के अतिरिक्त लाभ हैं ।

यह केवल एक सरसरी दृष्टि है कि एक बाहरी व्यक्ति इन फ़ाइलों के पीछे की मंशा को क्या मानता है: मुझे यकीन है कि एक वास्तविक Magento डेवलपर कोड के कार्यात्मक विवरण और इस अतिरिक्त स्तर के पीछे प्रेरणा दोनों में बहुत अधिक जानकारी प्रदान करने में सक्षम होगा। अमूर्तता का।

संपादित करें : ऐसा लगता है कि Magento के दस्तावेज़ वास्तव में, इन परिवर्तनों के पीछे की प्रेरणा का वर्णन करने वाला एक पृष्ठ है। देखो यहाँ अधिक जानकारी के लिए।

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