Observer CACKOUT_CART_PRODUCT_ADD_AFTER Получите количество продукта в корзине

magento.stackexchange https://magento.stackexchange.com/questions/11634

Вопрос

Я построил наблюдателя, который стреляет по адресу 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 который представляет собой массив всех элементов с одной цитатой, которые были созданы для этого продукта. Для простых продуктов это всегда один предмет, для пакетов и настраиваемых продуктов, это предмет для основного продукта и его детей, родитель всегда является первым предметом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top