Как получить идентификатор позиции Quote после добавления товара в корзину?

Я хочу указывать идентификатор элемента каждый раз, когда продукт добавляется в корзину. Я пробовал много событий, они возвращают объект элемента цитаты, но объект не содержит идентификатор элемента цитаты, поскольку он существует только при сохранении корзины в БД. Итак, есть ли какое-либо событие, которое вернет объект элемента цитаты с идентификатором элемента цитаты?

Я использовал следующие события

checkout_cart_product_add_after
sales_quote_add_item

но он не вернет quote_item_id в

public function addItemToSalesModelInfo(Varien_Event_Observer $observer){
    $item = $observer->getEvent()->getQuoteItem();
}

person user3318846    schedule 09.06.2014    source источник
comment
Опубликуйте усилия и код, которые вы пробовали до сих пор, и где вы столкнулись с проблемой.   -  person Mukesh Modhvadiya    schedule 09.06.2014


Ответы (4)


Вы используете правильное событие, т.е.

checkout_cart_product_add_after

чтобы получить доступ к идентификатору элемента котировки, вам нужно использовать,

$item = $observer->getQuoteItem()

вы можете получить доступ ко всей информации об элементе котировки, например

$item->getProductId() и т.д..

person huzefam    schedule 09.06.2014
comment
привет, он вернет продукт, который я добавил в корзину, а не идентификатор товара. - person user3318846; 09.06.2014
comment
да, так как у вас есть объект $item, который является экземпляром sales_flat_quote_item - person huzefam; 09.06.2014
comment
распечатайте объект $item, вы получите все подробности. - person huzefam; 09.06.2014
comment
Идентификатор товара доступен только в том случае, если товар уже существует в корзине. Если это совершенно новый элемент не будет иметь идентификатора. - person Björn Tantau; 29.09.2016

Идентификатор товара доступен только checkout_cart_product_add_after, если в корзине уже есть подходящий товар. На самом деле вам придется работать в два этапа. Прослушайте checkout_cart_product_add_after и добавьте флаг к пункту.

$item = $observer->getQuoteItem();
$item->setLastAdded(true);

А потом прослушать sales_quote_item_save_after и добавить id в сессию (или сделать что угодно), если флаг установлен.

$item = $observer->getItem();
if ($item->getLastAdded()) {
    Mage::getSingleton('checkout/session')->setLastAddedItemId($item->getId());
}
person Björn Tantau    schedule 29.09.2016
comment
Существует техническая причина, по которой идентификатор товара доступен только в checkout_cart_product_add_after, если подходящий товар уже существует в корзине? - person Gianni Di Falco; 30.09.2019

Получите предложение и количество товаров после добавления товара в корзину.

//Save your cart
$cart->save();

//use checkout/session
$cart1=Mage::getSingleton('checkout/session');
$cart1->setCartWasUpdated(true);

// Quote ID
$result_array["quoteid"]=$quoteid=$cart1->getQuoteId();

// Items count
$result_array["items_count"]=Mage::helper('checkout/cart')->getCart()->getItemsCount();
person Kishan Sanghani    schedule 28.06.2016

Чтобы получить идентификатор цитаты и идентификатор элемента цитаты, вы можете использовать приведенный ниже код.

$currentcart = Mage::getModel('checkout/cart');
$quote = $currentcart->getQuote();
$quoteItemId = $quote->getEntityId();

Чтобы получить идентификатор элемента котировки

$quoteItems = $quote->getAllVisibleItems();
foreach ($quoteItems as $item) {
$ItemId = $item->getId();
}
person Amitkumar solanki    schedule 16.10.2015