我想在结帐/购物车/页面上执行以下操作:
当访客购买超过 100 美元的商品时,我会为其添加免费产品。免费产品来自指定的类别。它会显示在购买的产品下。怎么做?
我想在结帐/购物车/页面上执行以下操作:
当访客购买超过 100 美元的商品时,我会为其添加免费产品。免费产品来自指定的类别。它会显示在购买的产品下。怎么做?
最简单的方法是通过观察者收听报价保存并以这种方式添加/删除免费产品。首先,设置一个名为 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 美元),如果达到,则添加产品。如果总计低于阈值或没有产品,它也会删除免费产品。请注意,您需要使用 定义免费产品的 ID $freeProductId
。
您可以查看 MageWorld 免费礼品扩展。根据您的描述,我相信这会满足您的需求。但是,扩展程序不是免费的。 http://www.mage-world.com/free-gift-magento-extension.html
如果您想自己开发此功能,我建议您扩展购物车促销规则。规则本身将检查订单是否超过 100 美元。您只需要开发将从您指定的类别中选择免费产品的部分。