Проблема с моим наблюдателем, когда клиент выходит из системы


Я создаю своего наблюдателя для изменения цены на странице корзины

Мой config.xml является

      <events>
          <checkout_cart_product_add_after>
              <observers>
                 <brain_priceedit_model_observer>
                    <type>singleton</type>
                    <class>Brain_Priceedit_Model_Observer</class>
                    <method>updatePrice</method>
                 </brain_priceedit_model_observer>
             </observers>
          </checkout_cart_product_add_after>
      </events>

И мой Observer.php является

public function updatePrice( Varien_Event_Observer $obs ) 
 {
    $quote = $obs->getEvent()->getQuote();
        $item = $obs->getQuoteItem();
        $product_id=$item->getProduct_id();
        $_product=Mage::getModel('catalog/product')->load($product_id);
        $newprice=$_product->getPrice();
        echo$price=$newprice*10;
        $item->setCustomPrice($price);
        $item->setOriginalCustomPrice($price);
        $item->getProduct()->setIsSuperMode(true);
  }

Этот наблюдатель работает, когда клиент входит в систему, но когда клиент не входит в систему, он показывает ошибку, подобную этой

enter image description here

Author: Vaibhav Ahalpara, 2015-01-02

2 answers

Вместо этого вы можете использовать событие checkout_cart_product_add_after для изменения или обновления цены в корзине

Здесь я могу просто показать вам небольшой пример

In your /app/code/local/{namespace}/{yourmodule}/etc/config.xml:

<config>
    <frontend>
        <events>
            <checkout_cart_product_add_after>
                <observers>
                    <your_event_name>
                        <class>{{modulename}}/observer</class>
                        <method>updatePrice</method>
                    </your_event_name>
                </observers>
            </checkout_cart_product_add_after>
        </events>    
    </frontend>

, А затем создайте класс наблюдателя в /app/code/local/namespace/modulename/Model/Observer.php

<?php
    class namespace_modulename_Model_Observer
    {
        public function updatePrice(Varien_Event_Observer $obs)
        {
            // Get the quote item
            $item = $obs->getQuoteItem();

            // Set the custom price
            $item->setCustomPrice($price);
            $item->setOriginalCustomPrice($price);
            // Enable super mode on the product.
            $item->getProduct()->setIsSuperMode(true);
        }

    }

Это просто идея, возможно, вы лучше знаете, как использовать observer.

Надеюсь, это вам обязательно поможет.

 1
Author: liyakat, 2015-01-02 06:22:51

Я нашел решение.Есть проблемы с функцией сохранения и идентификатором продукта

Удалить $quote_item->save(); и

Изменить на $quote_item->getProductId(); с $quote_item->getProduct_id();

 0
Author: Amit Bera, 2015-01-02 07:52:43