Magento - 将免费的儿童产品添加到购物车
Magento - add free child product to cart
我一直在尝试将客户选择的产品(简单产品)添加到购物车并将价格更改为免费。目前我有这个工作,但有两个要求除外:
作为子项添加到购物车中的主要产品
该产品正在添加到购物车,但作为附加产品而不是添加的主要产品的子产品。我试过各种方法都没有成功,这里是当前代码:
$product = $event->getProduct();
$product_gift = $this->_initProduct($gift); // function returns product based on ID
$params = array(
'product' => $product_gift->getId(),
'qty' => 1
);
$request = new Varien_Object();
$request->setData($params);
$product_gift->addCustomOption('child_product', 1);
$cart->addProduct($product_gift, $request);
$cart->save();
将价格更改为零这根本不起作用,但这是我根据在线阅读的结果。
$product_gift->setFinalPrice( 0 );
$product_gift->setCustomPrice( 0 );
$product_gift->setPrice( 0 );
$product_gift->setOriginalPrice( 0 );
$product_gift->setPriceCalculation( 0 );
$product_gift->setSpecialPrice( 0 );
除了上面突出显示的两点外,观察员正在工作。这是完整的观察者代码:
class Magestore_Promotionalgiftcustom_Model_Observer
{
protected function _initProduct($productId)
{
if ($productId)
{
$product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($productId);
if ($product->getId())
{
return $product;
}
}
return false;
}
public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
if(!Mage::helper('promotionalgiftcustom')->enablePromotionalgiftcustom()){
return;
}
$event = $observer->getEvent(); //Gets the event
$product = $event->getProduct();
$params = Mage::app()->getRequest()->getParams();
$cart = Mage::getSingleton('checkout/cart');
$added = array();
if( Mage::getModel('promotionalgift/catalogrule')->validateItem( $product->getId() ) ){
if(isset($params['gifts'])){
foreach ($params['gifts'] as $gift) {
if(!in_array($product->getId(), $added)) {
$product_gift = $this->_initProduct($gift);
if ($product_gift->getTypeId() == 'simple') {
if (!$product_gift->isSaleable()) {
continue;
}
$qty_4gift = 1;
$product_gift->setFinalPrice( 0 );
$product_gift->setCustomPrice( 0 );
$product_gift->setPrice( 0 );
$product_gift->setOriginalPrice( 0 );
$product_gift->setPriceCalculation( 0 );
$product_gift->setSpecialPrice( 0 );
$params = array(
'product' => $product_gift->getId(),
'qty' => $qty_4gift
);
$request = new Varien_Object();
$request->setData($params);
$cart->addProduct($product_gift, $request);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(false);
}
$added = $product->getId();
}
}
}
}
}
}
我只用了这两种方法就设法让价格变为零:
$product_gift->setPrice(0);
$product_gift->setFinalPrice(0);
经过数小时的测试和修改,我终于让它工作了。这是任何感兴趣的人的解决方案:
protected function _initProduct( $productId ) {
if ( $productId ) {
$product = Mage::getModel( 'catalog/product' );
$product->load( $productId );
if ( $product->getId() ) {
return $product;
}
}
return false;
}
public function checkoutCartProductAddAfter( Varien_Event_Observer $observer ) {
if ( ! Mage::helper( 'promotionalgiftcustom' )->enablePromotionalgiftcustom() ) {
return;
}
$event = $observer->getEvent();
$product = $event->getProduct();
$quote_item = $event->getQuoteItem();
$params = Mage::app()->getRequest()->getParams();
$cart = Mage::getSingleton( 'checkout/cart' );
if ( Mage::getModel( 'promotionalgift/catalogrule' )->validateItem( $product->getId() ) ) {
$cart->save();
if ( isset( $params['gifts'] ) ) {
foreach ( $params['gifts'] as $gift ) {
$product_gift = $this->_initProduct( $gift );
if ( $product_gift->getTypeId() == 'simple' ) {
if ( ! $product_gift->isSaleable() ) {
continue;
}
$qty_4gift = 1;
$params = array(
'product' => $product_gift->getId(),
'qty' => $qty_4gift,
'parent_product_id' => $product->getId()
);
$request = new Varien_Object();
$request->setData( $params );
$cart->addProduct( $product_gift, $request );
}
}
$cart->save();
Mage::getSingleton( 'checkout/session' )->setCartWasUpdated( false );
}
}
if($quote_item->getOptionByCode('info_buyRequest')){
$info_buyRequest = unserialize($quote_item->getOptionByCode('info_buyRequest')->getValue());
if($info_buyRequest['parent_product_id']){
$customPrice = 0;
$quote_item->setCustomPrice($customPrice)->setOriginalCustomPrice($customPrice);
$quote_item->save();
}
}
}
我一直在尝试将客户选择的产品(简单产品)添加到购物车并将价格更改为免费。目前我有这个工作,但有两个要求除外:
作为子项添加到购物车中的主要产品 该产品正在添加到购物车,但作为附加产品而不是添加的主要产品的子产品。我试过各种方法都没有成功,这里是当前代码:
$product = $event->getProduct();
$product_gift = $this->_initProduct($gift); // function returns product based on ID
$params = array(
'product' => $product_gift->getId(),
'qty' => 1
);
$request = new Varien_Object();
$request->setData($params);
$product_gift->addCustomOption('child_product', 1);
$cart->addProduct($product_gift, $request);
$cart->save();
将价格更改为零这根本不起作用,但这是我根据在线阅读的结果。
$product_gift->setFinalPrice( 0 );
$product_gift->setCustomPrice( 0 );
$product_gift->setPrice( 0 );
$product_gift->setOriginalPrice( 0 );
$product_gift->setPriceCalculation( 0 );
$product_gift->setSpecialPrice( 0 );
除了上面突出显示的两点外,观察员正在工作。这是完整的观察者代码:
class Magestore_Promotionalgiftcustom_Model_Observer
{
protected function _initProduct($productId)
{
if ($productId)
{
$product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($productId);
if ($product->getId())
{
return $product;
}
}
return false;
}
public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
if(!Mage::helper('promotionalgiftcustom')->enablePromotionalgiftcustom()){
return;
}
$event = $observer->getEvent(); //Gets the event
$product = $event->getProduct();
$params = Mage::app()->getRequest()->getParams();
$cart = Mage::getSingleton('checkout/cart');
$added = array();
if( Mage::getModel('promotionalgift/catalogrule')->validateItem( $product->getId() ) ){
if(isset($params['gifts'])){
foreach ($params['gifts'] as $gift) {
if(!in_array($product->getId(), $added)) {
$product_gift = $this->_initProduct($gift);
if ($product_gift->getTypeId() == 'simple') {
if (!$product_gift->isSaleable()) {
continue;
}
$qty_4gift = 1;
$product_gift->setFinalPrice( 0 );
$product_gift->setCustomPrice( 0 );
$product_gift->setPrice( 0 );
$product_gift->setOriginalPrice( 0 );
$product_gift->setPriceCalculation( 0 );
$product_gift->setSpecialPrice( 0 );
$params = array(
'product' => $product_gift->getId(),
'qty' => $qty_4gift
);
$request = new Varien_Object();
$request->setData($params);
$cart->addProduct($product_gift, $request);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(false);
}
$added = $product->getId();
}
}
}
}
}
}
我只用了这两种方法就设法让价格变为零:
$product_gift->setPrice(0);
$product_gift->setFinalPrice(0);
经过数小时的测试和修改,我终于让它工作了。这是任何感兴趣的人的解决方案:
protected function _initProduct( $productId ) {
if ( $productId ) {
$product = Mage::getModel( 'catalog/product' );
$product->load( $productId );
if ( $product->getId() ) {
return $product;
}
}
return false;
}
public function checkoutCartProductAddAfter( Varien_Event_Observer $observer ) {
if ( ! Mage::helper( 'promotionalgiftcustom' )->enablePromotionalgiftcustom() ) {
return;
}
$event = $observer->getEvent();
$product = $event->getProduct();
$quote_item = $event->getQuoteItem();
$params = Mage::app()->getRequest()->getParams();
$cart = Mage::getSingleton( 'checkout/cart' );
if ( Mage::getModel( 'promotionalgift/catalogrule' )->validateItem( $product->getId() ) ) {
$cart->save();
if ( isset( $params['gifts'] ) ) {
foreach ( $params['gifts'] as $gift ) {
$product_gift = $this->_initProduct( $gift );
if ( $product_gift->getTypeId() == 'simple' ) {
if ( ! $product_gift->isSaleable() ) {
continue;
}
$qty_4gift = 1;
$params = array(
'product' => $product_gift->getId(),
'qty' => $qty_4gift,
'parent_product_id' => $product->getId()
);
$request = new Varien_Object();
$request->setData( $params );
$cart->addProduct( $product_gift, $request );
}
}
$cart->save();
Mage::getSingleton( 'checkout/session' )->setCartWasUpdated( false );
}
}
if($quote_item->getOptionByCode('info_buyRequest')){
$info_buyRequest = unserialize($quote_item->getOptionByCode('info_buyRequest')->getValue());
if($info_buyRequest['parent_product_id']){
$customPrice = 0;
$quote_item->setCustomPrice($customPrice)->setOriginalCustomPrice($customPrice);
$quote_item->save();
}
}
}