簡體   English   中英

Shopware 6 插件 - 通過 id 加載和顯示 ProductStream

[英]Shopware 6 Plugin - Load and display ProductStream via id

我想通過給定的 id 加載 ProductStream 數據並將其顯示在前端,例如在產品購物車下方。 ProductStream 未鏈接到 ProductCrossSelling,因此未鏈接到產品。

我通過存儲庫加載了一個 ProductStream 集合。

$criteria = new Criteria($producStreamIds);
$productStreamResult = $this->productStreamRepository->search($criteria, $context);
$productStreams = $productStreamResult->getEntities();

現在我需要相關的產品列表,通過cms-element-product-slider.html.twig包含它們。

我找到了一個有類似問題的帖子: How to get products from the product stream ID in Shopware 6?

答案是,使用Core\Content\Product\SalesChannel\CrossSelling\ProductCrossSellingRoute.php的 function loadByStream ,但這個 function 是私有的。

唯一的公共 function 是load ,它需要一個$productId作為參數,我沒有,因為我的 ProductStream 沒有鏈接到產品。

是否有一種干凈的方法來加載未鏈接到 ProductCrossSelling 的 ProductStream 的產品?

我目前已經復制了loadByStream function 的代碼來加載 stream 的產品。

或者我可以在這種情況下使用 shopware 核心中的其他 function。 我還沒有找到其他東西。

感覺好像當前的假設是 ProductStreams 在沒有連接到 ProductCrossSelling 並因此連接到產品的情況下不會被使用。

產品 stream 實際上只是標准過濾器的集合。 您注入ProductStreamBuilder並使用產品 ID stream 調用buildFilters以檢索過濾器。 然后,您可以像往常一樣根據您的條件使用過濾器,添加限制、排序等並獲取您的產品實體。

// <argument type="service" id="Shopware\Core\Content\ProductStream\Service\ProductStreamBuilder"/>
private ProductStreamBuilderInterface $productStreamBuilder;

// <argument type="service" id="sales_channel.product.repository"/>
private SalesChannelRepositoryInterface $productRepository;

// ..

$filters = $this->productStreamBuilder->buildFilters(
    $productStreamId,
    $salesChannelContext->getContext()
);

$criteria = new Criteria();
$criteria->addFilter(...$filters);

$products = $this->productRepository
    ->search($criteria, $salesChannelContext)
    ->getEntities();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM