3

私はMagentoを初めて使用しますが、今日までそれを理解していたと思いました。これが私の問題です。

ページの読み込み時にカートにクーポンを追加するための新しいオブザーバーを作成しています。クーポンコードはURLで渡されます。私は、コードが任意の有効なURLを介して渡されることを望んでいます。

例:http:// magento /?coupon = MYCOUPON

クーポンコードを取得するために、イベント「controller_front_init_routers」をキャッチしています。

オブザーバーを操作していますが、カートにすでにアイテムがあり、クーポンコードを渡すと、カートが空のように見えます。クーポンを追加する方法は次のとおりです。

    public function applyCoupon($observer){
        $coupon_code = $observer->getEvent()->getData('front')->getRequest()->getParam('coupon');
        if(!empty($coupon_code)){
            Mage::getSingleton('checkout/session')->setData('coupon_code', $coupon_code);
            Mage::getSingleton('checkout/cart')->getQuote()->setCouponCode($coupon_code)->save();

            Mage::log('Coupon Code: '. $coupon_code);
        }
    }

Mage :: getSingleton('checkout / session')-> anything()を呼び出すと、カートのセッションが失われるようです。

現在のカートIDを取得してロードするだけでよいのではないかと思いましたが、その方法も見つからないようです。

誰かがこれを経験したことがありますか、おそらく解決策がありますか?

4

1 に答える 1

2

問題は、あなたが観察していることです。その時点で Magento セッションが初期化されていなかったため、Cookie の名前はコアのものとは異なります。

controller_action_predispatchリクエストからいくつかのセッション データを設定するために使用します。

于 2010-11-10T02:41:59.237 に答える