1

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

4

2 回答 2

2

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

为优惠券设置条件,它们仅在Shipping Method 不是 [freeshipping] Free时才有效

这不会隐藏免费送货选项,但在选择免费送货选项时优惠券代码将不起作用(它会在选择时删除优惠券代码。)。

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

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

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

}
?>
于 2013-07-24T15:38:40.663 回答
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 总额是否仍高于免费送货阈值。

于 2017-11-14T13:59:18.550 回答