Observer CACKOUT_CART_PRODUCT_ADD_AFTER Получите количество продукта в корзине
-
16-10-2019 - |
Вопрос
Я построил наблюдателя, который стреляет по адресу cackout_cart_product_add_after. В наблюдателе я установил количество такого количества:
$item->setQty($quantity);
Я хотел бы получить количество, которое уже находится в корзине для этого продукта, чтобы вместо этого было обновлено количество для продукта или перезаписано. Тем не менее, когда я пытаюсь получить количество продукта в корзине (Mage :: Helper ('Checkout/Cart')), я получаю «новое» количество, вероятно, потому что код количества обновлений уже запустил.
Как я мог получить количество тележки для продукта?
Заранее спасибо,
Joost
РЕДАКТИРОВАТЬ:
Это полный код наблюдателя:
public function modifyPrice(Varien_Event_Observer $obs)
{
$item = $obs->getQuoteItem();
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$price = $this->_getPrice($item);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$quantity = $this->_getQuantity($item);
$item->setQty($quantity);
$item->getProduct()->setIsSuperMode(true);
}
protected function _getPrice(Mage_Sales_Model_Quote_Item $item)
{
$price = 0;
Mage::app()->getRequest()->getPost();
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$prices = $item->getProduct()->getData('qty_dropdownbox_prices');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_prices = explode(';', $prices);
$array_quantities = explode(';', $quantities);
$price = $array_prices[$qtydropdownbox] / $array_quantities[$qtydropdownbox];
return $price;
}
protected function _getQuantity(Mage_Sales_Model_Quote_Item $item)
{
$quantity = 0;
Mage::app()->getRequest()->getPost();
$qty = Mage::app()->getRequest()->getParam('qty');
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_quantities = explode(';', $quantities);
$quantity = $array_quantities[$qtydropdownbox] * $qty;
return $quantity;
}
Решение
Я не понимаю, чего вы хотите достичь, но чтобы получить старое количество, которое вы слишком поздно, и даже Origdata перезаписана (я думаю), но проверьте это.
Я думаю, что самое простое - зацепить quote_item_load_after
И просто добавьте Qty, чтобы прочитать его позже, как $ QuoteItem-> setmypersonalqty ($ quoteItem-> getQty ())
Другие советы
Вы можете использовать мероприятие sales_quote_product_add_after
что запускается до сохранения новых элементов, чтобы вы могли использовать $item->getOrigData('qty')
Чтобы получить первоначальное количество.
У события есть один параметр, items
который представляет собой массив всех элементов с одной цитатой, которые были созданы для этого продукта. Для простых продуктов это всегда один предмет, для пакетов и настраиваемых продуктов, это предмет для основного продукта и его детей, родитель всегда является первым предметом.