2010-09-08 5 views
3

Je suis nouveau à Magento, mais je pensais que j'avais une compréhension jusqu'à aujourd'hui. Voici mon problème.Magento Panier: Vérifiez les articles vides panier

Je suis en train d'écrire un nouvel observateur pour ajouter un coupon au panier au chargement de la page. Le code de coupon est transmis dans l'URL et je souhaite que le code soit passable via n'importe quelle URL de travail.

Par exemple: http://magento/?coupon=MYCOUPON

Je suis sur la capture l'événement "controller_front_init_routers" pour capturer le code de coupon.

Je l'observateur de travail, mais si je dispose déjà d'un article dans le panier et je passe un code promo panier apparaît vide, voici comment j'ajoute le coupon:

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); 
     } 
    } 

Il semble que à chaque fois que j'appelle Mage :: getSingleton ('checkout/session') -> anything() je perds la session pour le panier. Je pensais que je devais peut-être simplement aller chercher l'identifiant du chariot actuel et le charger, mais je n'arrive pas à trouver un moyen de le faire non plus.

Quelqu'un a-t-il eu de l'expérience dans ce domaine, peut-être a-t-il une solution?

Répondre

2

Le problème est dans l'événement, que vous observez. Parce que la session Magento n'a pas été initialisée à ce moment-là, cookie a donc un nom différent de celui du noyau.

Utilisez controller_action_predispatch pour configurer certaines données de session à partir de la demande.