Ho un osservatore che rimuove gli articoli dal carrello se sono esauriti (ovvero il cliente ritorna al carrello x tempo e un articolo nel carrello è esaurito), e mostra un messaggio all'utente.Magento ricalcolare il totale del carrello nell'osservatore
La rimozione degli articoli funziona, ma non l'aggiornamento del totale del carrello. Qualsiasi aiuto sarebbe molto apprezzato!
mio osservatore osserva l'evento sales_quote_save_before:
public function checkStockStatus($observer)
{
// return if disabled or observer already executed on this request
if (!Mage::helper('stockcheck')->isEnabled() || Mage::registry('stockcheck_observer_executed')) {
return $this;
}
$quote = $observer->getEvent()->getQuote();
$outOfStockCount = 0;
foreach ($quote->getAllItems() as $item) {
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$stockItem = $product->getStockItem();
if ($stockItem->getIsInStock()) {
// in stock - for testing only
$this->_getSession()->addSuccess(Mage::helper('stockcheck')->__('in stock'));
$item->setData('calculation_price', null);
$item->setData('original_price', null);
}
else {
//remove item
$this->_getCart()->removeItem($item->getId());
$outOfStockCount++;
$this->_getSession()->addError(Mage::helper('stockcheck')->__('Out of Stock'));
}
}
if ($outOfStockCount) > 0) {
$quote->setTotalsCollectedFlag(false)->collectTotals();
}
Mage::register('stockcheck_observer_executed', true);
return $this;
}
protected function _getCart()
{
return Mage::getSingleton('checkout/cart');
}
protected function _getSession()
{
return Mage::getSingleton('checkout/session');
}
puoi accettare la risposta quindi per gli altri sapere che è stato risolto –