[英]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.