应用优惠券代码后,删除免费送货方式

时间:2013-07-24 06:08:33

标签: magento

如何在购物车页面以及onepagecheckout页面中应用优惠券代码后删除免费送货方式?

2 个答案:

答案 0 :(得分:2)

您可以在促销活动>中设置优惠券代码的价格规则购物车价格规则

如果送货方式不是[免费提供]免费

,请设置仅适用的优惠券的条件

这不会隐藏免费送货的选项,但选择免费送货选项时优惠券代码将无法使用(选择时会删除优惠券代码。)。

如果要从一个页面结帐中完全删除该选项,则需要对其进行编码。 (我不知道其他任何方式) 这样的事情应该有效:

<?php
$coupon = Mage::getSingleton('checkout/session')->getQuote()->getCouponCode();
if(!$coupon) {

FREE SHIPPING CODE FROM ONEPAGECHECKOUT IN HERE, IF NO COUPON CODE FOUND.

}
?>

答案 1 :(得分:1)

我使用以下方法解决了这个问题,所以发布以防其他人正在寻找。复制以下文件:

/app/code/core/Mage/Shipping/Model/Carrier/Freeshipping.php

到你的本地文件夹,创建目录,所以你有:

/app/code/local/Mage/Shipping/Model/Carrier/Freeshipping.php

然后替换70到86行,如下所示:

if (($request->getFreeShipping())
        || ($request->getBaseSubtotalInclTax() >=
            $this->getConfigData('free_shipping_subtotal'))
    ) {
        $method = Mage::getModel('shipping/rate_result_method');

        $method->setCarrier('freeshipping');
        $method->setCarrierTitle($this->getConfigData('title'));

        $method->setMethod('freeshipping');
        $method->setMethodTitle($this->getConfigData('name'));

        $method->setPrice('0.00');
        $method->setCost('0.00');

        $result->append($method);
    }

......以下内容:

if (($request->getFreeShipping())
        || ($request->getBaseSubtotalInclTax() >=
            $this->getConfigData('free_shipping_subtotal'))
    ) {
        $coupon = Mage::getSingleton('checkout/session')->getQuote()->getCouponCode();
        $totals = Mage::getSingleton('checkout/session')->getQuote()->getTotals();
        if(isset($totals['discount'])) {
            $discount = abs($totals['discount']->getValue()); // Discount value if applied
        } else {
            $discount = '';
        }
        // No free shipping if coupon used, unless GRAND total is still over free-shipping limit
        if(!$coupon || $coupon && ($totals['subtotal']->getValue() - $discount) > $this->getConfigData('free_shipping_subtotal')) {
            $method = Mage::getModel('shipping/rate_result_method');

            $method->setCarrier('freeshipping');
            $method->setCarrierTitle($this->getConfigData('title'));

            $method->setMethod('freeshipping');
            $method->setMethodTitle($this->getConfigData('name'));

            $method->setPrice('0.00');
            $method->setCost('0.00');

            $result->append($method);
        }
    }

现在,如果使用优惠券代码,Magento会在申请之前检查GRAND总额是否仍然高于免费送货限额。