Наблюдатель оформляет заказ в корзину товар добавьте после получения количества товара в корзине


Я создал наблюдателя, который срабатывает при 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;
    }
Author: Fabian Schmengler, 2013-12-09

2 answers

Я не понимаю, чего вы хотите достичь, но для получения старого количества вы опоздали, и даже исходные данные перезаписаны (я думаю), но проверьте это.

Я думаю, что проще всего подключиться к quote_item_load_after и просто добавить количество, чтобы прочитать его позже, например, $quoteitem->setmypersonalqty($quoteitem->getqty())

 3
Author: Fabian Blechschmidt, 2013-12-09 11:07:18

Вы можете использовать событие sales_quote_product_add_after, которое запускается перед сохранением новых товаров, чтобы вы могли использовать $item->getOrigData('qty') для получения исходного количества.

Событие имеет один параметр items, который представляет собой массив всех позиций с одинарной кавычкой, сгенерированных для этого продукта. Для простых продуктов это всегда один элемент, для пакетов и настраиваемых продуктов это элемент для основного продукта и его дочерних элементов, родительский элемент всегда является первым элементом.

 2
Author: Fabian Schmengler, 2015-09-18 08:02:49