【问题标题】:Magento Catalog Price Rule Suddenly Stops Working & Price Rule Not Applied on Custom OptionsMagento 目录价格规则突然停止工作并且价格规则未应用于自定义选项
【发布时间】:2014-06-14 19:28:44
【问题描述】:

我一整天都在尝试解决这两个问题,但找不到解决办法。以下是两个问题:

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

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

任何建议都将不胜感激,因为我整天都在努力。但情况变得更糟,所以我真的很沮丧...

【问题讨论】:

  • 我查看了数据库。表 catalogrule_affected_product 是空的,而其他 catalogrule_xxx 表不是。我的价格规则应该适用于所有产品。所以可能这就是问题所在?我试图删除并重新创建表格,删除价格规则并重新创建一个但仍然无法正常工作(表格仍然是空的)。请问有什么想法吗? x.x

标签: php magento


【解决方案1】:

目录价格规则突然又起作用了。我不知道为什么,数据库中的 catalogrule_affected_product 仍然是空的...

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

但是,百分比定价的自定义选项存在错误。显示的旧价格不正确。应该是产品原价+自定义选项原价,结果默认是产品原价+自定义选项折扣价..

解决办法如下:

您必须修改 2 个文件。第一个是public function getPrice($flag=false) in

app/code/core/Mage/Catalog/Model/Product/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');
    }

根据app/code/core/Mage/Catalog/Block/Product/View/Options.php 中的public function getJsonConfig(),$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;

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

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 2011-05-26
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多