我一直在努力解决这两个问题但却找不到解决办法。以下是两个问题:
今天早些时候,当价格规则仍然有效时,我试图解决第二个问题。我改变了一些代码,突然之间折扣价格消失了(价格规则突然停止了)。我立即恢复了我的代码更改,但折扣价格就像永远消失了...我试图将所有已更改的代码文件恢复到原始的magento包但仍然没有运气...所以我想这不是因为我修改了代码?
任何建议都会非常感激,因为我一整天都在努力......但情况变得更糟,所以我真的很沮丧......
答案 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。 ; - )