Добавьте цитату с запросом покупки info_buyRequest - PullRequest
0 голосов
/ 18 апреля 2020

Я бы хотел получить цену товара с ценой опциона с помощью пользовательского модуля, который рассчитывает цену товара по формуле, я хотел бы использовать функцию, не добавляя товар в корзину.

Функция получения элемента цитаты paramter

public function getProductFinalPrice($item, $forReindex = false, $storeId = null)

Так что я подумал добавить цитату с запросом на покупку info_buyRequest Я попробовал это

    $product = $this->_objectManager->create('Magento\Catalog\Model\Product')->load(5862);
    $customOptions = $this->_objectManager->get('Magento\Catalog\Model\Product\Option')->getProductOptionCollection($product);
    $item = $this->_objectManager->create('Magento\Quote\Model\Quote\Item');

    $options = $this->_objectManager->get('Magento\Quote\Model\ResourceModel\Quote\Item\Collection');
    $quote = $this->cart->getQuote();
    $quote->addProduct($product);
    $quote->save();
    $options->setQuote($quote);
    //$options->addItemFilter($item->getId());
    $item->setQuote($quote)->setProduct($product)->setQty($qty);
    foreach ($options as $option) {
        $item->addOption($option);
    }
    $infoBuyRequest = [
            "info_buyRequest" => [
                "uenc" => "aHR0cHM6Ly93d3cud2V0YWcuY2EvZW5fY2EvbmFtZS10YWdzL25hbWUtdGFncy1pbnNwaXJhdGlvbi9jdXN0b20tbmFtZS10YWctb3JkZXIv",
                "product" => 5862,
                "qty" => $qty
            ]
        ];

    $option = $this->_objectManager->create(
        \Magento\Quote\Model\Quote\Item\Option::class,
        ['data' => $infoBuyRequest]
    );

    $item->addOption($option);
    $item->setProductOptions($infoBuyRequest);
    var_dump($this->_getBuyRequest($item));


  var_dump($this->_getBuyRequest($item)); return 
  object(Magento\Framework\DataObject)#3647 (1) {
  ["_data":protected]=>
  array(2) {
    ["original_qty"]=>
     NULL
    ["qty"]=>
     int(100)
  }
 }

Мне нравится получать что-то с info_buyrequest

            [
            "info_buyRequest" => [
                "uenc" => "aHR0cHM6Ly93d3cud2V0YWcuY2EvZW5fY2EvbmFtZS10YWdzL25hbWUtdGFncy1pbnNwaXJhdGlvbi9jdXN0b20tbmFtZS10YWctb3JkZXIv",
                "product" => 5862,
                "qty" => $qty
            ]
        ]

Это функция _getBuyRequest

public function _getBuyRequest($item) { 
    $option = $item->getOptionByCode('info_buyRequest');
    if ($option) {
        $value = json_decode($option->getValue(), true); //in M2.2 json used for the buy request
        if (is_null($value))
            $value = unserialize($option->getValue()); //in M<2.2 the buy request is serialized
    } else
        $value = [];

    $buyRequest = new \Magento\Framework\DataObject($value);

    // Overwrite standard buy request qty, because item qty could have changed since adding to quote
    $buyRequest->setOriginalQty($buyRequest->getQty())
            ->setQty($item->getQty() * 1);

    return $buyRequest;
}

Так как добавить info_buyRequest? Я хотел бы загрузить параметры в элементе цитаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...