繁体   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