Magento 2: UI लिस्टिंग घटक को दो संग्रह की आवश्यकता क्यों है?


16

Magento 2 में एक नया " uiComponent" फीचर है। यह आपको <uiComponent/>अपने लेआउट पृष्ठ पर ग्रिड और फॉर्म जैसी चीजों को जोड़ने के लिए अपने लेआउट हैंडल में एक सरल टैग को शामिल करने की अनुमति देता है ।

ऐसा प्रतीत होता है कि डेटा ग्रिड (ए listing) के लिए कॉन्फ़िगरेशन के लिए दो संग्रह वस्तुओं को कॉन्फ़िगर करने की आवश्यकता होती है।

नीचे प्रत्येक कॉन्फ़िगरेशन संग्रह की भूमिका क्या है? या मैं इन संग्रहों की भूमिकाओं को गलत समझता हूं? या केवल एक ही संग्रह का उपयोग करके ग्रिड ऑब्जेक्ट बनाने का एक तरीका है?

निम्न कॉन्फ़िगरेशन एक UI लिस्टिंग घटक सेट करता है जिसका नाम है cms_page_listing

vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml

और निम्नलिखित DI इंजेक्शन Magento से कहता है कि cms_page_listingएक Magento\Cms\Model\ResourceModel\Page\Grid\Collectionसंग्रह का उपयोग करना चाहिए ।

<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
    <arguments>
        <argument name="collections" xsi:type="array">
            <item name="cms_page_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Page\Grid\Collection</item>
        </argument>
    </arguments>
</type>

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

हालाँकि , कॉन्फ़िगरेशन PageGridDataProviderमें यह भी cms_page_listingहै।

<!-- File: vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml -->
    <argument name="dataProvider" xsi:type="configurableObject">
        <argument name="class" xsi:type="string">PageGridDataProvider</argument>
        <argument name="name" xsi:type="string">cms_page_listing_data_source</argument>
        <argument name="primaryFieldName" xsi:type="string">page_id</argument>
        <argument name="requestFieldName" xsi:type="string">id</argument>
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="update_url" xsi:type="url" path="mui/index/render"/>
            </item>
        </argument>
    </argument>

PageGridDataProviderएक virtualType पर ले कर

<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider">
    <arguments>
        <argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\ResourceModel\Page\Collection</argument>
        <argument name="filterPool" xsi:type="object" shared="false">CmsGirdFilterPool</argument>
    </arguments>
</virtualType>

यह आभासी प्रकार एक दूसरे संग्रह को कॉन्फ़िगर करता है ( Magento\Cms\Model\ResourceModel\Page\Collection)।

यह स्पष्ट नहीं है कि इस दूसरे कॉन्फ़िगरेशन की आवश्यकता क्यों है, या ग्रिड बनाने में इसकी भूमिका क्या है। उच्च स्तर का प्रश्न संभवतः UI ग्रिड बनाने में क्या भूमिका निभाता हैdataProvider । बड़ा बड़ा सवाल शायद यह है कि एक यूआई लिस्टिंग ग्रिड बनाने के लिए PHP ऑब्जेक्ट क्या बनाए जाते हैं, और एक कॉन्फ़िगरेशन उन्हें कैसे नियंत्रित करता है

जवाबों:


10

यहां आपके पहले प्रश्न का त्वरित उत्तर है:

वर्चुअल प्रकार के लिए कॉन्फ़िगरेशन की आवश्यकता नहीं है। यदि आप देखते हैं तो आप Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderपाएंगे कि उन दो तर्कों में से किसी का भी उपयोग नहीं किया गया है ("संग्रह" के साथ-साथ "फ़िल्टरपूल")।

जैसे ही हम कर सकते हैं हम इस अप्रयुक्त कॉन्फ़िगरेशन को हटा देंगे। इसलिए, डेटा प्रदाताओं के आभासी प्रकारों के परिणाम की घोषणा इस तरह सरल होनी चाहिए:

सीएमएस पृष्ठों के लिए:

<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider"/>

और सीएमएस ब्लॉक के लिए

<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider"/>

और जैसा कि अब आप देख सकते हैं, UI घटक कॉन्फ़िगरेशन फ़ाइलों में आप डेटा प्रदाता वर्चुअल प्रकार का उपयोग करने के लिए लागू नहीं होते हैं और आप सामान्य डेटा प्रदाता को संदर्भित कर सकते हैं Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider। हमने वर्चुअल प्रकार का उपयोग करने का निर्णय लिया है, बस डेवलपर्स के लिए एक और विस्तार बिंदु प्रदान करने के लिए।


जानकर अच्छा लगा। इसके अलावा एक ग्रिड संग्रह बनाने के लिए आवश्यक नहीं है क्योंकि इसे एक आभासी प्रकार के रूप में भी घोषित किया जा सकता है (मुझे # यकीन नहीं है कि मैंने इसे पहले कहां देखा है, मुझे लगता है कि मैगेंटो 2 विकसित शाखा में कहीं) github.com/davidverholen/maxento2-teaser /blob/1.0/etc/…
डेविड वेरहोलेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.