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

Я создал событие наблюдателя, как показано ниже в моем файле config.xml

<events>
<sales_quote_add_item>
<observers>
<CustomModule_model_observer>
<type>singleton</type>
<class>CustomModule_Model_Observer</class>
<method>updatePrice</method>
</CustomModule_model_observer>
</observers>
</sales_quote_add_item>
</events>

В моей модели я создал Observer.php

require_once 'Mage/Checkout/controllers/CartController.php';

class CustomModule_Observer
{
public function _construct()
{
}

public function getNewPrice()
{

$newprice = "5";

return $newprice;
}

public function updatePrice($observer)
{
$event = $observer->getEvent();
$product = $event->getProduct();// not getting any values how can i get this.
$quote_item = $event->getQuoteItem();
$new_price = $this->getNewPrice();
$quote_item->setOriginalCustomPrice($new_price);
$quote_item->save();
}
}

Ссылка Изменение цены в цитате при добавлении товара в корзину: magento

0

Решение

Вы не получили никакого значения в $product = $event->getProduct(); потому что этот объект не установлен, когда отправляется событие добавления элемента.

пожалуйста, проверьте Mage_Sales_Model_Quote классная линия № 939.

$item->setQuote($this);
if (!$item->getId()) {
$this->getItemsCollection()->addItem($item);
Mage::dispatchEvent('sales_quote_add_item', array('quote_item' => $item));
}

Его единственный возвращаемый объект quote_item. Если вы хотите продукты, так что вы должны найти другой способ, как:

 $quote_item = $event->getQuoteItem(); // Which return quote item
$quote_item->getProduct();

Я надеюсь, что это работа для вас Спасибо.

1

Другие решения

Я попробовал это, и он работает, он дает нам идентификатор продукта.

$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $item){
$productId = $item->getProductId();
$product = Mage::getModel('catalog/product')->load($productId);
// Do something
}
0

По вопросам рекламы [email protected]