【发布时间】:2012-03-01 10:46:45
【问题描述】:
我们添加了一个“是/否”产品属性,标记为:“允许此产品应用优惠券吗?”默认值为“yes”。
这样做的原因是,我们从不希望销售团队在数以千计的可用产品中对某些核心产品给予折扣。
我们可以将这些产品作为 SKU 添加到创建的一千张优惠券中的每一张中,但这可能会被意外更改,或者被创建优惠券的销售团队不正确地列出。
因此,我们要求他们将此规则添加到他们的新优惠券中,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包含此规则。
当我在 Magento 1.5 社区版上测试规则时,它的作用与条件完全相反。
当我在我们的其他企业解决方案(magento 1.9)上测试相同的规则时,它实际上做了它应该做的事情。
当我在购物车中有一个产品,该属性设置为“否”的产品,并且我应用优惠券代码时,它会接受优惠券代码。在另一个系统(企业)上,它应该拒绝它。
还有其他人遇到过这个吗?
更新: 好的,这变得更有趣了。 当我单步执行规则类时,产品通过了,但产品属性没有通过。范围设置为网站,我确实检查了它是否保存在后端的该范围下。
这真的很奇怪......
在企业系统上,产品属性,配置和数据相同。
我什至尝试不使用双重否定,并使用另一个新属性来确保。 违反以下规则,优惠券被拒绝:“优惠券代码无效。” 这是正确的,因为产品设置为“可以使用优惠券吗?= 否”。
但问题是我不想检查所有其他产品,而是检查那些被标记为“否”的少数产品。
无论如何,这对我们不起作用,因为如果购物车中有任何产品的属性“可以使用优惠券吗?”的值为“否”,我们不想应用优惠券。
这是一个双重否定的规则,不管你怎么看。
我通过validate()函数遍历/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product.php,当第二次添加产品时,数据显示在属性中,但是当我去重新申请优惠券,并再次单步执行此功能时,这些值就消失了。这很奇怪。
将新产品添加到购物车时:
重新申请优惠码时:
描述和其他一些属性到底消失在哪里了?
更新说明我离我越来越近了。 当我从以下更改“/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product.php”中的以下 validate() 函数时:
public function validate(Varien_Object $object)
{
$product = false;
if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
$product = $object->getProduct();
} else {
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
}
$product
->setQuoteItemQty($object->getQty())
->setQuoteItemPrice($object->getPrice())
->setQuoteItemRowTotal($object->getBaseRowTotal());
return parent::validate($product);
}
到这里:
public function validate(Varien_Object $object)
{
$product = false;
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
$product
->setQuoteItemQty($object->getQty())
->setQuoteItemPrice($object->getPrice())
->setQuoteItemRowTotal($object->getBaseRowTotal());
return parent::validate($product);
}
然后就可以正常使用了!
【问题讨论】:
标签: magento