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