Наблюдатель оформляет заказ в корзину товар добавьте после получения количества товара в корзине
Я создал наблюдателя, который срабатывает при checkout_cart_product_add_after. В наблюдателе я устанавливаю количество следующим образом:
$item->setQty($quantity);
Я хотел бы получить количество, которое уже есть в корзине для этого продукта, чтобы вместо этого количество для продукта обновлялось или перезаписывалось. Тем не менее, когда я пытаюсь получить количество товара в корзине (Mage::helper ('проверка/корзина')), я получаю "новое" количество, вероятно, потому, что код количества обновления уже сработал.
Как я могу получить количество товара в корзине?
Заранее благодарю,
Йост
ИЗМЕНИТЬ:
Это полный код наблюдателя:
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;
}
2 answers
Я не понимаю, чего вы хотите достичь, но для получения старого количества вы опоздали, и даже исходные данные перезаписаны (я думаю), но проверьте это.
Я думаю, что проще всего подключиться к quote_item_load_after
и просто добавить количество, чтобы прочитать его позже, например, $quoteitem->setmypersonalqty($quoteitem->getqty())
Вы можете использовать событие sales_quote_product_add_after
, которое запускается перед сохранением новых товаров, чтобы вы могли использовать $item->getOrigData('qty')
для получения исходного количества.
Событие имеет один параметр items
, который представляет собой массив всех позиций с одинарной кавычкой, сгенерированных для этого продукта. Для простых продуктов это всегда один элемент, для пакетов и настраиваемых продуктов это элемент для основного продукта и его дочерних элементов, родительский элемент всегда является первым элементом.