2015-05-05 4 views
1

я создал событие наблюдателя, как показано ниже в моем 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(); 
     } 
    } 

Reference Changing the price in quote while adding product to cart: magento

ответ

0

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

$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 
} 
1

Вы не получили никакого значения в $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(); 

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

Смежные вопросы