Magento 2 $quote->getAllItems();无法正常工作



试着在售后流程中捕捉报价项目,效果很好。但当报价不在默认网站中时,请求为空。为什么?谢谢这是代码:

$orderId = 123;
$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$quoteToOrder = $objectManager->create('MagentoQuoteModelQuoteItemToOrderItem');
$order = $objectManager->create('MagentoSalesModelOrder')->load($orderId);
$quote = $objectManager->create('MagentoQuoteModelQuote')->load($order->getQuoteId());
$items = $quote->getAllItems();
foreach ($items as $quoteItem) ...

它不是结账或购物车的扩展,而是在订单通过cron发货之前开始的售后流程。

从Magento-2.0开始,Magento_Checkout和Magento_Quote中的服务合同还没有提供必要的方法,所以我们使用cart模型。在你的插件中这样注入:

public function __construct(MagentoCheckoutModelCart $cart)
{
$this->cart = $cart;
}

现在你可以访问购物车,你可以通过几种方式检索物品,这与Magento1:基本相同

$this->购物车->getQuote((->getItemsCollection((

返回包含与当前报价关联的所有项目的报价项目集合。

$this->购物车->getItems((

这是上面方法的快捷方式,但如果没有引号,它将返回一个空数组,因此您不能依赖于获取集合实例。

$this->购物车->getQuote((->getAllItems((

加载项目集合,然后返回未标记为已删除(即已在当前请求中删除(的所有项目的数组。

$this->购物车->getQuote((->获取所有可访问项((

加载项目集合,然后返回一个未标记为已删除且没有父项的所有项目的数组(即,您获得的是捆绑和可配置产品的项目,但不是其关联的子项(。每个数组项目对应于购物车页面上显示的一行。

选择最适合您需求的产品。在大多数情况下,最后一种方法是您所需要的。

最新更新