Magento购物车规则与简单和虚拟产品在一起

时间:2014-07-04 03:07:33

标签: magento magento-1.7 shopping-cart rule

购物车规则=免费送货的小册子> $ 99.00

场景01 - 带3个简单产品的购物车 - 确定,适用规则,免运费。 场景02 - 购物车有2个简单产品和1个虚拟 - 失败,规则未应用。

搜索我猜这可能是Magento 1.7的错误。

你能否对此有所了解?

2 个答案:

答案 0 :(得分:0)

到目前为止,从未找到过解决方法,但建议在单独的attribute set或单独的category中使用简单的产品,然后您可以将规则应用为属性集和/或类别可用于应用规则。

答案 1 :(得分:0)

因此,问题是类Mage_SalesRule_Model_Validator

中的代码
protected function _getAddress(Mage_Sales_Model_Quote_Item_Abstract $item)
{
    if ($item instanceof Mage_Sales_Model_Quote_Address_Item) {
        $address = $item->getAddress();
    } elseif ($item->getQuote()->getItemVirtualQty() > 0) {
        $address = $item->getQuote()->getBillingAddress();
    } else {
        $address = $item->getQuote()->getShippingAddress();
    }
    return $address;
}

根据项目决定要检查的地址。如果购物车中有可下载的商品,则会使用结算地址。 但是,当可下载项目与简单项目一起出现时,Magento会将所有货币值分配到送货地址。

因此,您的规则将失败,因为帐单邮寄地址的小计为0,但可下载项目要检查帐单邮寄地址。

我认为这是Magento中的一个错误,应该更改此方法以反映此问题。

一个简单的解决方法是将方法重写为:

    protected function _getAddress(Mage_Sales_Model_Quote_Item_Abstract $item)
    {
        $quote = $item->getQuote();
        if ($quote->isVirtual()) {
            return $quote->getBillingAddress();
        } else {
            return $quote->getShippingAddress();
        }
    }