0

我想在结帐/购物车/页面上执行以下操作:

当访客购买超过 100 美元的商品时,我会为其添加免费产品。免费产品来自指定的类别。它会显示在购买的产品下。怎么做?

4

2 回答 2

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 美元),如果达到,则添加产品。如果总计低于阈值或没有产品,它也会删除免费产品。请注意,您需要使用 定义免费产品的 ID $freeProductId

于 2013-01-13T13:23:58.657 回答
0

您可以查看 MageWorld 免费礼品扩展。根据您的描述,我相信这会满足您的需求。但是,扩展程序不是免费的。 http://www.mage-world.com/free-gift-magento-extension.html

如果您想自己开发此功能,我建议您扩展购物车促销规则。规则本身将检查订单是否超过 100 美元。您只需要开发将从您指定的类别中选择免费产品的部分。

于 2013-01-13T12:59:38.320 回答