2012-04-09 3 views
1

고객이 Magento shop에서 무료로 하나의 제품을 (예로서) 제공 할 수있는 가능성을 만들어야합니다. 나는 this 포스트에서 대부분의 것을 알아 냈다. 그러나 지금 나는 하나의 문제가있다. checkout_cart_product_add_after에서 실행되는 Observer 메서드가 만들어졌습니다.옵서버의 카트에 상품 추가

내 모든 코드 그래서 일단
$productId = $observer->getProduct()->getId(); 
    $cartHelper = Mage::helper('checkout/cart'); 
    $items = $cartHelper->getCart()->getItems(); 
    Mage::getModel('core/session')->addNotice('Product id: '.$productId); 
    foreach ($items as $item) { 
     if ($item->getProduct()->getId() == $productId) { 
       $itemId = $item->getItemId(); 
       $cart = $cartHelper->getCart()->removeItem($itemId)->save() ;//It WORKS!!!!!!!!!!!! 
       $product = Mage::getModel('catalog/product')->load($productId); 
       $cart->addProduct($product, $this->_getRequest()->getParams());      
        $cart->save(); 
        Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
        break; 
       } 
      } 

은 (예를 들어 제품) 0.00 가격으로 쇼핑 카트에 제품을 추가하는 몇 가지 요청 매개 변수에 따라 : 그리고 거기에 내가 몇 가지 코드 (모든 일의 그것의 단지 부분)이있다. 그 부분은 잘 작동하므로 여기에 게시되지 않습니다. 두 번째 파트 (위에서 게시 한 부분)는 기존 제품을 삭제하고 정상 가격의 제품으로 교체해야합니다. 거의 모든 것이 잘 돌아가는 한가지를 제외하고 - 라인 $cart->addProduct($product, $this->_getRequest()->getParams());가 작동하지 않고 왜 (아무런 오류, 예외도, 로그도 없음) 이해할 수 없습니다.

protected function _getRequest() 
    { 
     return Mage::app()->getRequest(); 
    } 

을 그리고 내가 $this->_getRequest()->getParams()를 기록 할 경우이 같은 것이 : : _getRequest 방법은 다음과 같습니다

2012-04-09T14:46:56+00:00 DEBUG (7): Array(
    [uenc] => aHR0cDovL2xvY2FsaG9zdC93b3AvZmVhdHVyZWQvY2xhc3NpYy1saW5lLXBvbHkuaHRtbA,, 
    [product] => 50 
    [related_product] => 
    [bundle_option] => Array(
      [20] => 75 
      [21] => 84 
      [22] => 94 
     ) 
    [qty] => 1 
    [send-request] => 0 
) 

그래서 그 $cart->addProduct($product, $this->_getRequest()->getParams());이 작동하지 않습니다 이유는 무엇입니까? 그것을 올바르게하는 방법? 아마도 addAction()Mage_Checkout_CartController (덮어 쓰기) 인 것을 사용하는 것이 더 낫습니다. 내 언어는 죄송합니다. 답변 주셔서 감사합니다. 누군가가 나를 도울 수 있기를 바랍니다.

+0

동일한 $ productId를 사용하고있는 동일한 제품을 추가하는 것처럼 보입니다. 원하는 제품입니까? –

+0

정상입니다. 정상적인 카트를 제품에 추가하는 것이 논리입니다 이 상품이 이미 0.00 가격으로 추가 되었다면 가격이 책정됩니다. 아마도 가격 인상을 바꾸는 것이 좋을지도 모르지만 그럴 수는 없을 것이라고 생각합니다. – alphacentauri

+0

QUOTE 대 장바구니를 사용하지 않습니까? 체크 아웃 과정이 시작되기 전에 상품이 견적에 추가됩니다. – MB34

답변

0

같은 문제를 걸러 낼 사람을 명확하게하기 위해 제 질문에 대답하겠습니다. 코드 :

$cart->addProduct($product, $this->_getRequest()->getParams()); 

내가 그것을 전에 $cart->save()를 호출하기 때문에 일을하고 그 후 동일한 작업을 수행하기 위해 노력하고 그래도 문제가보다하지 않습니다. 내가 먼저 $cart->save()을 제거했을 때 잘 작동합니다.

관련 문제