我有一个我找不到解决方案的问题。我有一个购物车规则,为订单小计 > 75 美元提供免费送货服务。但是,如果使用折扣代码,则尽管订单总金额低于 75 美元,但仍会再次应用此规则。没有税收和其他费用。只有当他们花费 > 75 美元时,我才想免费送货。任何想法我该如何解决这个问题?提前致谢
问问题
8393 次
3 回答
6
您是对的,购物车规则仅适用于购物车小计,免费送货承运人模型也是如此。使用一个小的重写就可以改变freeshipping模型的行为。
首先,停用允许免费送货的购物车规则。然后转到System > Configuration > Shipping Methods
并激活免费送货承运商,为其提供 75 美元的“最低订单金额”。
接下来,我们需要添加重写,以便免费送货模型使用折扣值而不是小计。
添加一个带有相应模块注册文件的模块 My_Shipping。由于您在 stackoverflow 上提问,我假设您熟悉创建 Magento 模块。然后My/Shipping/etc/config.xml
使用以下重写声明添加文件:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<shipping>
<rewrite>
<carrier_freeshipping>My_Shipping_Model_Freeshipping</carrier_freeshipping>
</rewrite>
</shipping>
</models>
</global>
</config>
现在唯一缺少的是重写的载体模型。以下代码实现了您需要的更改:
class My_Shipping_Model_Freeshipping extends Mage_Shipping_Model_Carrier_Freeshipping
{
/**
* Force the original free shipping class to use the discounted package value.
*
* The package_value_with_discount value already is in the base currency
* even if there is no "base" in the property name, no need to convert it.
*
* @param Mage_Shipping_Model_Rate_Request $request
* @return Mage_Shipping_Model_Rate_Result
*/
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
$origBaseSubtotal = $request->getBaseSubtotalInclTax();
$request->setBaseSubtotalInclTax($request->getPackageValueWithDiscount());
$result = parent::collectRates($request);
$request->setBaseSubtotalInclTax($origBaseSubtotal);
return $result;
}
}
就是这样。现在,如果包括折扣在内的小计高于 75 美元,则可以使用免费送货方式。否则客户是看不到的。
于 2012-07-11T07:21:34.413 回答
1
不幸的是,这是我注意到的一个错误。他们根据未贴现值计算小计。您可以解决此问题的一种方法是为您的折扣代码规则设置“停止处理规则”。
于 2012-07-09T19:34:33.103 回答
1
你可以试试跟班。这必须重写模型“Mage_SalesRule_Model_Rule_Condition_Address”。这会将“折扣小计”选项添加到管理面板中销售规则管理的条件选项中。
class YourCompany_SalesRule_Model_Rule_Condition_Address extends Mage_SalesRule_Model_Rule_Condition_Address {
/**
* (non-PHPdoc)
* @see Mage_SalesRule_Model_Rule_Condition_Address::loadAttributeOptions()
*/
public function loadAttributeOptions()
{
parent::loadAttributeOptions();
$attributes = $this->getAttributeOption();
$attributes['base_subtotal_with_discount'] = Mage::helper('salesrule')->__('Subtotal with discount');
$this->setAttributeOption($attributes);
return $this;
}
/**
* (non-PHPdoc)
* @see Mage_SalesRule_Model_Rule_Condition_Address::getInputType()
*/
public function getInputType()
{
if ($this->getAttribute() == 'base_subtotal_with_discount')
return 'numeric';
return parent::getInputType();
}
/**
* Add field "base_subtotal_with_discount" to address.
* It is need to validate the "base_subtotal_with_discount" attribute
*
* @see Mage_SalesRule_Model_Rule_Condition_Address::validate()
*/
public function validate(Varien_Object $address)
{
$address->setBaseSubtotalWithDiscount($address->getBaseSubtotal() + $address->getDiscountAmount());
return parent::validate($address);
}
}
于 2013-05-29T08:21:33.560 回答