目录价格规则突然又起作用了。我不知道为什么,数据库中的 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;
我花了很多时间来解决这个问题。希望这可以帮助某人花时间修复此错误。 ;-)