Magento 2: İki Izgaralı Bileşen Veri Sağlayıcıları Arasındaki Fark Nedir?


16

Magento 2.1'de, yapılandırılmış ve kullanımda toplam 25 UI Bileşen listesi / ızgara veri sağlayıcısı vardır. Veri sağlayıcı sınıfları ve ui_componentdosyaları aşağıda listelenmiştir

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

Bu bilgilere dayanarak, son kullanıcı programcılarının ızgara bileşenlerini temel almak için kullanabileceği iki temel sınıf olduğu görülmektedir .

  • Magento \ Framework \ Görünüm \ Eleman \ UIComponent \ DataProvider'ın \ DataProvider'ın
  • Magento \ Ui \ DataProvider'ın \ AbstractDataProvider

Magento\Ui\DataProvider\AbstractDataProviderSınıf iki basit görünüyor ve (görünüyor?) Sadece Magento kaynak modelinin yapılandırılmasını gerektirir. Müşteri ağıMagento\Customer\Ui\Component\DataProvider modülü bu sınıfa dayanır ve bir ızgara listesi için gereken tüm sıralama, filtreleme vb. İşlevlere sahip gibi görünür.

Bir neden Magento\Framework\View\Element\UiComponent\DataProvider\DataProvidervar mı - yoksa veri sağlayıcısı oluşturmak için farklı bir yaklaşım gerektiren eski / yeni kod mu? Başka bir deyişle, Magento\Framework\View\Element\UiComponent\DataProvider\DataProvidertabloya fazladan özellikler getirmek veya sistemin diğer bölümlerinin ızgara ile bir şeyler yapmasını sağlamak mı? Kaynak koduna bakıldığında Magento\Framework\App\RequestInterfaceilgi çekici görünüyor - bu ızgaralarla işlevselliği "ücretsiz" olarak rapor edebileceğiniz anlamına geliyor. Ancak, kapsamlı bir kod safari olmadan, bunun doğru olup olmadığından emin değilim ve birisinin neden bir sınıfı diğeri üzerinde kullanacağınıza dair net bir açıklama olmasını umuyorum.


Bu arada iyi bir soru, yönetici içindeki özel modülüm için ihracatla ilgili bir sorunu çözmeme yardımcı oldu. Bir çeşit yanlış Dataprovider türü "Magento \ Ui \ DataProvider \ AbstractDataProvider" kullanıyordum.
Sanjay Chaudhary

Yanıtlar:


14

Bana göre, bu temel fark Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider Arama API'sını kullanması.

Bu sınıfta aşağıdaki sınıflar kullanılır:

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

Filtreleme / sıralama / sayfalama için kullanılanlar:

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);
}

Ve ayrıca açıkça arama için:

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/AbstractDataProviderArama API'sından bahsediyor ancak hiç kullanmıyorsa ilginç olan şey:

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();
}

Şimdi GitHub'da bu dosyaların geçmişini kontrol ederseniz şunları elde edersiniz:

Gördüğünüz gibi, bu iki dosya için yapılan taahhütlerin çoğu aşağıdaki dahili bilete bağlıdır: MAGETWO-39905: UI components compatibility with Search API

Magento/FrameworkDosya için yapılmış olsa bile, dosya için hiç yapılmamıştır Magento/Ui.

Bunun dışında bu dosyalar arasında herhangi bir fark görmüyorum. Biri doğrudan koleksiyon üzerinde çalışıyor, diğeri ise sonuçları oluşturmak için Arama API'sını kullanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.