고객이 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
(덮어 쓰기) 인 것을 사용하는 것이 더 낫습니다. 내 언어는 죄송합니다. 답변 주셔서 감사합니다. 누군가가 나를 도울 수 있기를 바랍니다.
동일한 $ productId를 사용하고있는 동일한 제품을 추가하는 것처럼 보입니다. 원하는 제품입니까? –
정상입니다. 정상적인 카트를 제품에 추가하는 것이 논리입니다 이 상품이 이미 0.00 가격으로 추가 되었다면 가격이 책정됩니다. 아마도 가격 인상을 바꾸는 것이 좋을지도 모르지만 그럴 수는 없을 것이라고 생각합니다. – alphacentauri
QUOTE 대 장바구니를 사용하지 않습니까? 체크 아웃 과정이 시작되기 전에 상품이 견적에 추가됩니다. – MB34