Как программно заменить товары в корзине?
Я попробовал два разных подхода для этого, но оба потерпели неудачу в разные моменты.
- , вызвав
$cart->truncate()->save()
, а затем$cart->addProduct($product, $qty)
. Но вместо того, чтобы заменять всю корзину новыми товарами, перекрывающиеся товары (с одинаковым количеством или без него) в любом случае будут удалены. - Я также пробовал
$quote->removeAllItems()->collectTotals()->save()
, а затем$cart->addProduct($product, $qty)
, но когда количество перекрывающегося товара в совокупности превышает уровень запасов, это вызовет ложную ошибку нет на складе сообщение.
Подробнее о 2
Я погрузился в код, который проверяет уровень запасов, который Mage_CatalogInventory_Model_Observer::checkQuoteItemQty()
.
Каждый раз, когда я тестирую код в 2), в общей сложности он проверялся четыре раза, и в 3-й раз $qtyForCheck
этого конкретного перекрывающегося элемента суммируется с количествами до И после removeAllItems()
, эффективно генерируя сообщение о ложной ошибке.
1
1 answers
Почему бы не объявить корзину заново и не начать все сначала вот так?
$session = Mage::getSingleton('checkout/session');
$session->getQuote()->delete();
$session->clear();
$cart = Mage::getModel('checkout/cart');
$cart->setQuote($session->getQuote());
$product = Mage::getModel('catalog/product') -> load($product_id);
if ($product) {
if ($product -> isSaleable()) {
$cart -> addProduct($product, array('qty' => $qty));
}
}
// $session->setCartWasUpdated(true); // Not really necessary - Vicary
$cart->save();
3
Author: Moose, 2015-01-05 08:02:46