마 젠토 2 : 두 그리드 구성 요소 데이터 공급자의 차이점은 무엇입니까?


16

Magento 2.1에는 총 25 개의 UI 구성 요소 목록 / 그리드 데이터 공급자가 구성되어 사용 중입니다. 데이터 제공 업체 클래스 및 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

이 정보를 바탕으로 최종 사용자 프로그래머는 그리드 구성 요소를 기반 으로 두 가지 기본 클래스를 사용할 수 있습니다.

  • 마 젠토 \ 프레임 워크 \보기 \ 요소 \ UiComponent \ DataProvider \ DataProvider
  • 마 젠토 \ 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"를 사용하고있었습니다.
Sanjay Chaudhary

답변:


14

나에게 가장 큰 차이점은 Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderSearch API를 사용 한다는 것 입니다.

이 클래스에는 다음 클래스가 사용됩니다.

  • 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검색 API 가 언급되었지만 전혀 사용하지 않는 것이 흥미 롭습니다 .

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.

그 외에도 나는 그 파일들 사이에 어떤 차이도 보이지 않습니다. 하나는 컬렉션에서 직접 작업하고 다른 하나는 검색 API를 사용하여 결과를 생성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.