簡體   English   中英

收集總計 magento2 后更新購物車項目價格

[英]Update cart item price after collect totals magento2

我正在嘗試更新購物車商品價格取決於報價總額。 我已經讓觀察者在保存購物車之前更改價格。 我的問題是更改項目的值在錯誤的時間更改。 例子:

我在購物車中有兩件商品 #1 商品 - 150 美元,#2 商品 - 10 美元,當我更改數量時,該商品的第一件商品總額設置為 300 美元(沒關系),但是 #2 商品的價格更改為 0(這是好的)但在數據庫中我仍然看到price, base_price, row_total, base_row_total, price_incl_tax, base_price_incl_tax, row_total_incl_tax, base_row_incl_tax值為 10 美元。 當我再次更改 #1 商品的數量時,#2 商品將價格更改為 10 美元,但數據庫中的值現在設置為 0。我應該在哪里以及如何更改價格以在數據庫中獲得正確的數據? 這是我的代碼:

事件.xml:

<event name="checkout_cart_save_before">
    <observer name="Vendor::save_cart” instance="Vendor\Observer\BeforeCartSaveObserver" shared="false"/>
</event>

觀察員:

public function execute(\Magento\Framework\Event\Observer $observer)
{
    $cart = $observer->getCart();

    $quote = $this->checkoutSession->getQuote();

    $quote->collectTotals();
    $quote->setTotalsCollectedFlag(false);

    foreach ($quote->getAllVisibleItems() as $item) {
        $product = $item->getProduct();
        if (!$product->getIsFree()) {
            continue;
        }

        $freeItem = $item;
        break;
    }

    if ($quote->getGrandTotal() > 240) {
        $item->setCustomPrice(0)
            ->setOriginalCustomPrice(0)
            ->getProduct()->setIsSuperMode(true);
    } else {
        $product = $freeItem->getProduct();
        $defaultProductPrice = $product->getPriceInfo()
            ->getPrice('regular_price')
            ->getAmount()
            ->getBaseAmount();
        $item->setConvertedPrice($defaultProductPrice)
            ->setCustomPrice($defaultProductPrice)
            ->setOriginalCustomPrice($defaultProductPrice);

        $item->setPrice($defaultProductPrice)->setBaseOriginalPrice($item->getProduct()->getPrice());
    }
        $item->calcRowTotal();

    return $this;
}

嘗試刪除 $quote->setTotalsCollectedFlag(false); 或調用 $quote->collectTotals(); 更改價格后。 我看到它幫助了一些人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM