【发布时间】:2014-08-06 11:01:06
【问题描述】:
我正在尝试捕捉将购物车项目移动到愿望清单的事件。我尝试了wishlist_product_add 和wishlist_product_item 事件。但它们不适用于购物车页面。我想将产品的自定义选项保存在愿望清单中。但是当我将产品从购物车移动到愿望清单时,所有选项数据都丢失了。
【问题讨论】:
标签: php magento shopping-cart mage
我正在尝试捕捉将购物车项目移动到愿望清单的事件。我尝试了wishlist_product_add 和wishlist_product_item 事件。但它们不适用于购物车页面。我想将产品的自定义选项保存在愿望清单中。但是当我将产品从购物车移动到愿望清单时,所有选项数据都丢失了。
【问题讨论】:
标签: php magento shopping-cart mage
您可以使用以下活动
<wishlist_item_add_after>
<observers>
<cop_wishlist_price_options>
<class>AAA_Addon_Model_Observer</class>
<method>addProductPriceOptionsToWishlist</method>
</cop_wishlist_price_options>
</observers>
</wishlist_item_add_after>
在观察者中,您可以访问愿望清单和报价。将数据/选项从报价单复制到愿望清单项目。
public function addProductPriceOptionsToWishlist($observer){
try {
$wishlist = $observer->getEvent()->getWishlist();
$itemId = (int) $this->_getRequest()->getParam('item');
$cart = Mage::getSingleton('checkout/cart');
$session = Mage::getSingleton('checkout/session');
$quote_item = $cart->getQuote()->getItemById($itemId);
if (!$quote_item) {
Mage::throwException(
Mage::helper('wishlist')->__("Requested cart item doesn't exist")
);
}
$productId = $quote_item->getProductId();
$buyRequest = $quote_item->getBuyRequest();
$buyRequestData = $buyRequest->getData();
if($buyRequestData):
$additional_op = $quote_item->getOptionByCode('additional_options');
$additional_op = $additional_op->getData();
$wishlist_item = Mage::getModel('wishlist/item')->load($productId,'product_id');
//save additonal options to wishlist-options
$modelRes_w_item_op = Mage::getModel('wishlist/item_option');
$modelRes_w_item_op->setWishlistItemId($wishlist_item->getId());
$modelRes_w_item_op->setProductId($productId);
$modelRes_w_item_op->setCode('additional_options');
$modelRes_w_item_op->setValue($additional_op['value']);
$modelRes_w_item_op->save();
endif;
} catch (Mage_Core_Exception $e) {
Mage::log($e->getMessage());
} catch (Exception $e) {
Mage::log($e->getMessage());
}
}
【讨论】:
建议您实现一个事件记录系统,以便您可以准确地看到正在触发的事件。
http://inchoo.net/ecommerce/magento/choosing-a-right-event-to-observe/
然后您将能够看到所有已触发的事件并为您的观察者选择最好的事件来挂钩
【讨论】:
使用事件“wishlist_add_product”。
以下是“dispatchEvent”,用于将产品添加到购物车愿望清单的方法中。
Mage::dispatchEvent(
'wishlist_add_product',
array(
'wishlist' => $wishlist,
'product' => $product,
'item' => $result
)
);
【讨论】: