Saya mencoba mengubah Harga Produk saya seperti ini:
Controller.php:
[EDIT]
<?php
namespace MassiveArt\ShoppingCart\Controller\Index;
use Magento\Catalog\Model\ProductFactory;
use Magento\Checkout\Model\Cart;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Data\Form\FormKey;
class Index extends Action
{
/**
* @var FormKey
*/
protected $formKey;
/**
* @var Session
*/
protected $checkoutSession;
/**
* @var Cart
*/
protected $cart;
/**
* @var ProductFactory
*/
protected $productFactory;
/**
* Constructor.
*
* @param Context $context
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Customer\Model\Session $customerSession
* @param JsonFactory $resultJsonFactory
* @param FormKey $formKey
* @param Cart $cart
* @param ProductFactory $productFactory
*/
public function __construct(
Context $context,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Customer\Model\Session $customerSession,
JsonFactory $resultJsonFactory,
FormKey $formKey,
Cart $cart,
ProductFactory $productFactory
) {
$this->checkoutSession = $checkoutSession;
$this->customerSession = $customerSession;
$this->formKey = $formKey;
$this->resultJsonFactory = $resultJsonFactory;
$this->cart = $cart;
$this->productFactory = $productFactory;
parent::__construct($context);
}
public function execute()
{
try {
// Set result data and pass back
$result = $this->resultJsonFactory->create();
$allItems = $this->checkoutSession->getQuote()->getAllVisibleItems();
foreach ($allItems as $item) {
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$price = 100; //set your price here
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$item->setSubtotal($price);
$item->getProduct()->setIsSuperMode(true);
}
$this->checkoutSession->setTotalsCollectedFlag(false);
$this->checkoutSession->getQuote()->save();
$this->checkoutSession->getQuote()->setTotalsCollectedFlag(false);
$this->setTotalsCollectedFlag(false);
$result->setData(['message' => __("Products added succesfully")]);
return $result;
} catch (\Exception $e) {
$result->setData(['error' => __($e->getMessage())]);
return $result;
}
}
}
(EDIT) Dengan kode baru perubahan harga, tetapi subtotal tidak! Seperti yang Anda lihat di sini:
Terima kasih sebelumnya!
quote
daricheckoutSession
. Saya sedikit bingung.Jawaban:
Saya mengerti, saya pikir Anda berada di jalan yang benar, tetapi saya pikir Anda harus menyimpan kutipannya. Jika Anda melihat kelas ini:
\Magento\Checkout\Controller\Cart\Add
Anda dapat melihat di Baris 114:Saya mengubah harga dari acara yang disebut di akhir
addProduct()
metode, dan Magento menyimpan keranjang di akhir. Jadi dalam kasus Anda, Anda harus menyimpan kutipan di controller Anda.sumber
Saya membuat cuplikan yang memungkinkan Anda mengubah harga. Sebenarnya, itu mengubah harga setelah Anda menambahkan produk di keranjang Anda. Dengan kata lain, itu mengubah harga barang Anda dalam penawaran Anda. https://gist.github.com/0-Sony/d9d2ea792b5533bfeaff28827e6f207a
Semoga ini bisa membantu.
sumber
Anda ingin memperbarui total baris dan bukan subtotal, gunakan metode
$item->setRowTotal()
atau$item->setBaseRowTotal()
. Juga, mungkin membantu menambahkan$item->save()
sebelum akhir dari loop.Subtotal adalah urutan / cart subtotal.
sumber
@ felix, Anda perlu mengatur
setSubtotal()
penawaran. Atur Subtotal di luar for loop
.seperti ini
Catatan: Kode Diuji
sumber
Untuk harga keranjang Upadate, Anda harus menggunakan kereta Model alih-alih checkout. Muat item dari keranjang dan perbarui.
sumber
Coba kode di bawah ini:
Anda perlu memodifikasi
process()
fungsi untuk kebutuhan Anda.CATATAN: Jangan modifikasi file inti magento. Buat plugin untuk ini.
Saya harap ini akan membantu ... !!!
sumber