2010-09-08 3 views
3

Я новичок в Magento, но я думал, что добрался до сегодняшнего дня. Вот моя проблема.Magento Cart: Проверить наличие предметов в корзине

Я пишу нового наблюдателя, чтобы добавить купон в корзину на загрузку страницы. Код купона передается по 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() Я теряю сеанс для корзины.

Я подумал, что мне просто нужно было получить текущий идентификатор корзины и загрузить его, но я тоже не могу найти способ сделать это.

Есть ли у кого-нибудь опыт в этом, возможно, есть решение?

ответ

2

Проблема в том, что вы наблюдаете. Поскольку сеанс Magento не был инициализирован в этот момент, так что cookie имеет другое имя, чем основное.

Используйте controller_action_predispatch для настройки некоторых данных сеанса из запроса.