我想在结帐/购物车/页面上执行以下操作:
当访客购买订单超过100美元的商品时,我会为其添加免费产品。免费产品来自指定类别。它将显示在购买的产品下。怎么做?
答案 0 :(得分:0)
您可以查看MageWorld免费礼品延期。根据您的描述,我相信会做您需要的。但是,扩展不是免费的。 http://www.mage-world.com/free-gift-magento-extension.html
如果您想自己开发此功能,我建议您扩展购物车促销规则。规则本身将检查订单是否超过100美元。您只需开发将从您指定的类别中选择免费产品的部件。
答案 1 :(得分:0)
最简单的方法是通过观察者收听报价并以这种方式添加/删除免费产品。首先,设置一个名为Yrcrz / AddFreeProduct的新模块。在config.xml中,添加:
<?xml version="1.0"?>
<config>
<modules>
<Yrcrz_AddFreeProduct>
<version>0.0.1</version>
</Yrcrz_AddFreeProduct>
</modules>
<global>
<events>
<sales_quote_save_before>
<observers>
<Yrcrz_AddFreeProduct_Observer>
<type>singleton</type>
<class>Yrcrz_AddFreeProduct_Model_Observer</class>
<method>sales_quote_save_before</method>
</Yrcrz_AddFreeProduct_Observer>
</observers>
</sales_quote_save_before>
</events>
</global>
</config>
这定义了我们将要监听的事件sales_quote_save_before
。然后,添加一个Observer.php文件并添加:
<?php
class Yrcrz_AddFreeProduct_Model_Observer
{
public function sales_quote_save_before(Varien_Event_Observer $observer)
{
$quote = $observer->getQuote();
$freeProductId = 182;
$threshold = 100;
$freeProductExists = false;
$items = $quote->getAllItems();
foreach ($items as $item) {
if ($item->getProduct()->getId() == $freeProductId) {
$realGrandTotal = $quote->getGrandTotal() - $item->getRowTotalInclTax();
if ($realGrandTotal < $threshold) {
$quote->removeItem($item->getId());
return false;
}
$freeProductExists = true;
}
}
if ($freeProductExists || !$items) {
return false;
}
$cart = Mage::getSingleton('checkout/cart');
if ($quote->getGrandTotal() >= $threshold) {
$product = Mage::getModel('catalog/product')->load($freeProductId);
if ($product && $product->getId()) {
$params = array();
$cart->addProduct($product, $params);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
}
}
}
}
此代码检查是否达到阈值($ 100),如果是,则添加产品。如果总计低于门槛或没有产品,它也将删除免费产品。请注意,您需要使用$freeProductId
定义免费产品的ID。