Magento 2 在购物车和订单中获得产品定制选项的价值

如果您想知道如何从购物车中获取产品定制选项的价值并在Magento 2中订购,那么这是您学习的正确选择。本主题将指出如何使用以下两个示例来完成此操作。

首先,您可以使用ObjectManager

  • 获取购物车中的产品的自定义选项
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager->get('\Magento\Checkout\Model\Cart'); 
 
// get cart items
$items = $cart->getItems();
 
// get custom options value of cart items
foreach ($items as $item) {
    $options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
    $customOptions = $options['options'];
    if (!empty($customOptions)) {
        foreach ($customOptions as $option) {
            $optionTitle = $option['label'];
            $optionId = $option['option_id'];
            $optionType = $option['type'];
            $optionValue = $option['value'];
        }
    }
}
  • 检索任何订单的产品的自定义选项
$orderObject = $objectManager->get('\Magento\Sales\Model\Order'); 
 
// load by order id
$orderId = 1; // YOUR ORDER ID
$order = $orderObject->load($orderId);
 
// load by order increment id
// $incrementId = '000000001'; // YOUR ORDER INCREMENT ID
// $order = $orderObject->loadByIncrementId($incrementId);
 
$items = $order->getAllVisibleItems(); // get all items aren't marked as deleted and that do not have parent item; for e.g. here associated simple products of a configurable products are not fetched
 
// Order items can also be fetched with the following functions
// $items = $order->getAllItems(); // get all items that are not marked as deleted
// $items = $order->getItems(); // get all items
 
foreach ($items as $item) {
    $options = $item->getProductOptions();        
    if (isset($options['options']) && !empty($options['options'])) {        
        foreach ($options['options'] as $option) {
            echo 'Title: ' . $option['label'] . '<br />';
            echo 'ID: ' . $option['option_id'] . '<br />';
            echo 'Type: ' . $option['option_type'] . '<br />';
            echo 'Value: ' . $option['option_value'] . '<br />' . '<br />';
        }
    }
}

但是,ObjectManager直接使用它并不是一个很好的解决方案。您仍然可以使用具有依赖注入的代码,如下所示:

  • 打开块类Mageplaza_HelloWorld,然后\Magento\Sales\Model\Order在我模块的块类的构造函数中注入对象。

应用程序/代码/ Mageplaza /的HelloWorld /块/ HelloWorld.php

<?php
namespace Mageplaza\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $_orderModel;    
    
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Sales\Model\Order $orderModel,
        array $data = []
        )
        {        
            $this->_orderModel = $orderModel;
            parent::__construct($context, $data);
        }
    
        public function getOrderItems($orderId) 
        {
            $order = $this->_orderModel->load($orderId);
            return $order->getAllVisibleItems();        
        }
}
?>
  • 像这样,您可以在.phtml文件中使用该功能。
$orderId = 1; // YOUR ORDER ID
$items = $block->getOrderItems($orderId);
 
foreach ($items as $item) {
    $options = $item->getProductOptions();        
    if (isset($options['options']) && !empty($options['options'])) {        
        foreach ($options['options'] as $option) {
            echo 'Title: ' . $option['label'] . '<br />';
            echo 'ID: ' . $option['option_id'] . '<br />';
            echo 'Type: ' . $option['option_type'] . '<br />';
            echo 'Value: ' . $option['option_value'] . '<br />' . '<br />';
        }
    }
}

这就是您将用于在Magento 2中检索超值产品自定义选项购物车订单的所有内容。感谢您的阅读,如果有任何问题请在下面发表评论。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论