Magento目录价格规则突然停止工作&价格规则未应用于自定义选项

时间:2014-06-14 19:28:45

标签: php magento

我一直在努力解决这两个问题但却找不到解决办法。以下是两个问题:

  1. 目录价格规则突然停止工作(过去几个月一直在工作)。我已经设置了价格规则,它处于活动状态,我点击了“应用规则”。但价格规则不适用于任何产品,仅显示原始价格。
  2. 目录价格规则不适用于自定义选项的价格。 (例如,产品成本为300美元,定制选项额外成本为50美元,价格规则为10%。合理的方式应为(300 + 50)* 0.9 = 315美元,但在magento中为300 * 0.9 + 50 = 320美元)。 / LI>

    今天早些时候,当价格规则仍然有效时,我试图解决第二个问题。我改变了一些代码,突然之间折扣价格消失了(价格规则突然停止了)。我立即恢复了我的代码更改,但折扣价格就像永远消失了...我试图将所有已更改的代码文件恢复到原始的magento包但仍然没有运气...所以我想这不是因为我修改了代码?

    任何建议都会非常感激,因为我一整天都在努力......但情况变得更糟,所以我真的很沮丧......

1 个答案:

答案 0 :(得分:0)

目录价格规则突然再次起作用..我不明白为什么,db中的catalogrule_affected_product仍然是空的......

此外,我已经找到问题2的解决方法。我们不能使用固定价格自定义选项,因为在自定义选项的额外价格之前应用了价格规则。但我们可以使用百分比定制的自定义选项,因为价格* custom_option_percent * price_rule_percent = price * price_rule_percent * custom_option_percent。

但是,有一个定价百分比选项的错误。显示的旧价格不正确。它应该是产品原价+定制选项原价,但原来价格是原价+定制选项折扣价格。

以下是解决方案:

您必须修改2个文件。

中的第一个是public function getPrice($flag=false)
  

应用程序/代码/核心/法师/目录/型号/产品/ Option.php

将其更改为

public function getPrice($flag=false)
    {

        /* original
        if ($flag && $this->getPriceType() == 'percent') {
            $basePrice = $this->getOption()->getProduct()->getFinalPrice();
            $price = $basePrice*($this->_getData('price')/100);
            return $price;
        }
        return $this->_getData('price');
        */


        if ($flag && $this->getPriceType() == 'percent') {
            $basePrice = $this->getProduct()->getFinalPrice();
            $price = $basePrice * ($this->_getData('price')/100);
            return $price;
        }

        if (!$flag && $this->getPriceType() == 'percent') {
            $basePrice = $this->getProduct()->getPrice();
            $price = $basePrice * ($this->_getData('price')/100);
            return $price;
        }

        return $this->_getData('price');
    }

根据public function getJsonConfig()中的app/code/core/Mage/Catalog/Block/Product/View/Options.php,$ flag = true表示新价格,$ flag = false表示旧价格。但是,在原始代码中,$ flag = false未被处理,因此我们必须添加它。

其次,我们必须修改javascript以便重新加载价格。 js文件是js/varien/product.js。修改函数reload: function()(在第637行附近)。

这段代码将额外的自定义选项价格添加到最终价格中。但是,它会为新旧价格增加相同的金额。所以我们必须添加一些代码来处理旧价格。

                // Add This
                var oldpriceflag = false;
                if (pair.value == 'old-price-'+this.productId) oldpriceflag = true;
                //


                var subPrice = 0;
                var subPriceincludeTax = 0;
                Object.values(this.customPrices).each(function(el){
                    if (el.excludeTax && el.includeTax) {
                        subPrice += parseFloat(el.excludeTax);
                        subPriceincludeTax += parseFloat(el.includeTax);

                    // Add This
                if (oldpriceflag) {
                            subPrice += parseFloat(el.oldPrice) - parseFloat(el.price);
                            subPriceincludeTax += parseFloat(el.oldPrice) - parseFloat(el.price);
                        }
                    //

                    } else {

                        // Remove This
                        //subPrice += parseFloat(el.price);
                        //subPriceincludeTax += parseFloat(el.price);
                        //

                        // Add This
                        if (oldpriceflag && typeof el.oldPrice != 'undefined') {
                        subPrice += parseFloat(el.oldPrice);
                            subPriceincludeTax += parseFloat(el.oldPrice);
                        }
                        else {
                            subPrice += parseFloat(el.price);
                            subPriceincludeTax += parseFloat(el.price);
                        }
                        //

                    }
                });
                excl += subPrice;
                incl += subPriceincludeTax;

我花了很多时间来解决这个问题。希望这可以帮助别人花时间修复这个bug。 ; - )