Magento 2: दो ग्रिड घटक डेटा प्रदाताओं के बीच अंतर क्या है?


16

Magento 2.1 में, कुल 25 यूआई घटक लिस्टिंग / ग्रिड डेटा प्रदाता कॉन्फ़िगर और उपयोग में हैं। उनके डेटा प्रदाता कक्षाएं और ui_componentफाइलें नीचे सूचीबद्ध हैं

Magento\Bundle\Ui\DataProvider\Product\BundleDataProvider                     bundle_product_listing.xmlMagento\Catalog\Ui\DataProvider\Product\Attributes\Listing                    product_attributes_grid.xml
Magento\Catalog\Ui\DataProvider\Product\ProductCustomOptionsDataProvider      product_custom_options_listing.xml
Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider                   configurable_associated_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider                   product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\CrossSellDataProvider         crosssell_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\RelatedDataProvider           related_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\UpSellDataProvider            upsell_product_listing.xml
Magento\Cms\Ui\Component\DataProvider                                         cms_block_listing.xml
Magento\Cms\Ui\Component\DataProvider                                         cms_page_listing.xml
Magento\ConfigurableProduct\Ui\DataProvider\Attributes                        product_attributes_listing.xml
Magento\Customer\Ui\Component\DataProvider                                    customer_listing.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          customer_online_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_creditmemo_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_invoice_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_shipment_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_view_creditmemo_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_view_invoice_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          sales_order_view_shipment_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider          search_synonyms_grid.xml
BraintreeTransactionsDataProvider (virtual type)                              braintree_report.xml
    Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider    
Magento\GroupedProduct\Ui\DataProvider\Product\GroupedProductDataProvider     grouped_product_listing.xml
Magento\Review\Ui\DataProvider\Product\ReviewDataProvider                     review_listing.xml
Magento\Theme\Ui\Component\Design\Config\DataProvider                         design_config_listing.xml

इस जानकारी के आधार पर, दो प्रतीत होते हैं बेस क्लास एंड यूज़र प्रोग्रामर्स का उपयोग अपने ग्रिड कंपोनेंट्स को बेस करने के लिए किया जा सकता है

  • Magento \ फ्रेमवर्क \ देखें \ तत्व \ UIComponent \ dataProvider \ dataProvider
  • Magento \ Ui \ dataProvider \ AbstractDataProvider

Magento\Ui\DataProvider\AbstractDataProviderकक्षा दो की सरल लगता है, और (करने लगता है?) केवल एक Magento संसाधन मॉडल के विन्यास की आवश्यकता है। ग्राहक ग्रिड Magento\Customer\Ui\Component\DataProviderमॉड्यूल इस वर्ग पर आधारित है, और ग्रिड लिस्टिंग के लिए आवश्यक सभी छंटाई, छानने, आदि की कार्यक्षमता प्रतीत होती है।

क्या कोई कारण Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderमौजूद है - या यह सिर्फ पुराने / नए कोड है जो डेटा प्रदाता बनाने के लिए एक अलग दृष्टिकोण लेते हैं? दूसरे शब्दों में, क्या Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderतालिका में किसी भी अतिरिक्त सुविधाओं को लाने का उपयोग किया जाता है, या सिस्टम के अन्य हिस्सों को ग्रिड के साथ काम करने में सक्षम बनाता है ? स्रोत कोड को देखते हुए, Magento\Framework\App\RequestInterfaceपेचीदा लगता है - जैसा कि इसका मतलब है कि आप इन ग्रिडों के साथ "मुफ्त में" कार्यक्षमता की रिपोर्ट कर सकते हैं। हालांकि, एक व्यापक कोड सफारी के बिना, मुझे यकीन नहीं है कि यह सच है या नहीं, और मैं उम्मीद कर रहा हूं कि किसी को स्पष्ट स्पष्टीकरण है कि आप दूसरे पर एक वर्ग का उपयोग क्यों करेंगे।


वैसे अच्छा सवाल है, इसने मुझे व्यवस्थापक में अपने कस्टम मॉड्यूल के लिए निर्यात के साथ एक समस्या को हल करने में मदद की। मैं गलत Dataprovider प्रकार "Magento \ Ui \ DataProvider \ AbstractDataProvider" का उपयोग करने की तरह था।
संजय चौधरी

जवाबों:


14

मेरे लिए, यह मुख्य अंतर यह है कि Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider खोज एपीआई उपयोग करता है।

इस वर्ग में निम्न वर्ग उपयोग किए जाते हैं:

  • Magento\Framework\Api\FilterBuilder
  • Magento\Framework\Api\Search\ReportingInterface
  • Magento\Framework\Api\Search\SearchCriteria
  • Magento\Framework\Api\Search\SearchCriteriaBuilder
  • Magento\Framework\Api\Search\SearchResultInterface

जिनका उपयोग फ़िल्टरिंग / ऑर्डरिंग / पेजिंग के लिए किया जाता है:

public function addFilter(\Magento\Framework\Api\Filter $filter)
{
    $this->searchCriteriaBuilder->addFilter($filter);
}

public function addOrder($field, $direction)
{
    $this->searchCriteriaBuilder->addSortOrder($field, $direction);
}

public function setLimit($offset, $size)
{
    $this->searchCriteriaBuilder->setPageSize($size);
    $this->searchCriteriaBuilder->setCurrentPage($offset);
}

और यह भी स्पष्ट रूप से खोज के लिए:

public function getData()
{
    return $this->searchResultToOutput($this->getSearchResult());
}

protected function searchResultToOutput(SearchResultInterface $searchResult)
{
    $arrItems = [];

    $arrItems['items'] = [];
    foreach ($searchResult->getItems() as $item) {
        $itemData = [];
        foreach ($item->getCustomAttributes() as $attribute) {
            $itemData[$attribute->getAttributeCode()] = $attribute->getValue();
        }
        $arrItems['items'][] = $itemData;
    }

    $arrItems['totalRecords'] = $searchResult->getTotalCount();

    return $arrItems;
}

public function getSearchResult()
{
    return $this->reporting->search($this->getSearchCriteria());
}

क्या दिलचस्प है कि अगर Magento/Ui/DataProvider/AbstractDataProviderखोज एपीआई का उल्लेख है, लेकिन इसका उपयोग न करें:

public function getSearchCriteria()
{
    //TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
    return null;
}

public function getSearchResult()
{
    //TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
    return $this->getCollection();
}

अब यदि आप यहाँ GitHub में उन फ़ाइलों के इतिहास की जाँच करते हैं जो आपको मिलती हैं:

जैसा कि आप देख सकते हैं कि उन दो फाइलों के अधिकांश कमेंट्स निम्नलिखित आंतरिक टिकट से जुड़े हैं: MAGETWO-39905: UI components compatibility with Search API

भले ही यह Magento/Frameworkफ़ाइल के लिए किया गया हो, यह फ़ाइल के लिए कभी नहीं किया गया है Magento/Ui

इसके अलावा मुझे उन फाइलों में कोई अंतर नहीं दिखता। एक सीधे संग्रह पर काम कर रहा है, दूसरा परिणाम उत्पन्न करने के लिए खोज एपीआई का उपयोग कर रहा है।

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