0

私はそのようなオブザーバーを持っています

<events>
 <sales_quote_add_item>
         <observers>
            <reservation_observer_order_save_before1>
                <type>singleton</type>
                <class>Mageec_Total_Model_Observer</class>
                <method>updatePrice</method>
            </reservation_observer_order_save_before1>
         </observers>
 </sales_quote_add_item>
</events>

関数 updatePrice は以下のとおりです。

public function updatePrice($observer){

    $event = $observer->getEvent();

    $quote_item = $event->getQuoteItem();


    if ($quote_item->getProductType() == "virtual"){
        $new_price = (float)$quote_item->getProduct()->getPrice();
        $quote_item->setOriginalCustomPrice($new_price);

        $qty = Mage::getSingleton('checkout/cart')->getSummaryQty(); //return 0
                    $qty = $quote_item->getQty(); //return 0 too
        Mage::log(print_r($qty,true));



        $quote_item->setTotalPrice( $new_price * $qty );
    }
}

カートの数量または見積もりアイテムの数量を取得できません。カートオブジェクトがいっぱいになる前にこのオブザーバーが実行されるためだと思います。この場合、どこで数量を取得できますか?

4

2 に答える 2

1

私は自分で解決策を見つけました。最初の製品をカートに入れるときに、sales_quote_add_item オブザーバーを実行します。しかし、それは最初の製品であり、カートはまだ保存されていません. したがって、カートの数量を取得するコードは0を返します。したがって、解決策は、注文を処理する前にカートを保存することです。コード例を以下に示します。

public function modifyPrice(Varien_Event_Observer  $observer){
        $cart = Mage::getSingleton('checkout/cart');
        $cart->save();


        $quote_item = $observer->getQuoteItem();
    if ($quote_item->getProductType() == "virtual"){
            $new_price = (float)$quote_item->getProduct()->getPrice();
        $quote_item->setOriginalCustomPrice($new_price);

        $totalItemsInCart = Mage::helper('checkout/cart')->getItemsCount(); //Total items in cart
        Mage::log( "Total Product in Cart : " );  
        Mage::log( print_r($totalItemsInCart, true) );  

        $qty = 1;

        if($totalItemsInCart)   
        {               
            Mage::log( "Total Product in Cart : ".$totalItemsInCart );          
            $cart = Mage::getModel('checkout/cart')->getQuote()->getData();
            Mage::log( "Total Quantity In Cart    : ".(int)$cart['items_qty'] ); 
            $qty = (int)$cart['items_qty'];
        }






        $quote_item->setTotalPrice( $new_price * $qty );
        $quote_item->save();
    }

    return $this;
}

ご覧のとおり、次の行があります。

$cart = Mage::getSingleton('checkout/cart');
$cart->save();

これらは解決策です。

于 2012-11-01T04:50:10.813 に答える
0

このコードを試すことができます。うまくいかない場合はお知らせください

$totalItemsInCart = Mage::helper('checkout/cart')->getItemsCount(); //Total items in cart

if($totalItemsInCart)   
{               
    echo "Total Product in Cart : ".$totalItemsInCart;          
    $cart = Mage::getModel('checkout/cart')->getQuote()->getData();
    echo "Total Quantity In Cart    : ".(int)$cart['items_qty'];    
}
于 2012-10-30T04:53:56.613 に答える