我们增加了一个“是/否”的产品属性,标签是:“允许这个产品有优惠券吗?”默认值为“是”。
这样做的原因是,我们从来不希望销售团队在现有的数千种核心产品中给予折扣。
我们可以将这些产品作为SKU添加到创建的每一张优惠券中,但这可能会被意外地改变,或者由创建优惠券的销售团队不恰当地列出。
因此,我们要求他们在新的优惠券中增加这一规则,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包括此规则。

当我测试Magento1.5,condition上的规则时,它所做的与条件完全相反。
当我在另一个企业解决方案(Magento1.9)上测试相同的规则时,它实际上做了它应该做的事情。
当我在购物车中有一个产品时,作为一个属性设置为"No“的产品,并且我应用了优惠券代码,它接受优惠券代码。在另一个系统(企业),它拒绝它,因为它应该。
还有其他人遇到过这个吗?
更新:好的,这变得更有趣了。当我跨过规则类时,产品被传递了,但是产品属性没有通过。范围被设置为网站,我检查了它是否保存在后端的范围下。
这真的很奇怪..。
在企业系统上,产品属性具有相同的配置和数据。
我甚至试着不要有双重否定,另一个新的属性,以确保。违反以下规则,优惠券将被拒绝:“优惠券代码无效。”这是正确的,因为产品被设置为“可以使用优惠券?=否”。

但问题是,我不想检查所有其他产品,而是针对少数被标记为“否”的产品。
无论如何,这不会对我们起作用,因为如果购物车中有任何产品的值为"No“,则我们不想应用优惠券,因为属性”可以使用优惠券吗?“。
--这是一个双重否定规则,不管你怎么看待它。
当我第二次添加产品时,我逐步遍历了/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);
}它工作得很好!
发布于 2012-02-10 01:11:52
找到了实际的问题,下面是我为解决方案所做的工作:
以下位获取购物车价格规则的产品数据:
if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
$product = $object->getProduct();
} else {
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
}罪魁祸首是这一行:$product = $object->getProduct();
它调用“Quote/Item/Digact.php”中的一行:$product = $this->_getData('product');
它将简单地从系统中获取缓存的数据,其中包括如下所选内容:
$productCollection = Mage::getModel('catalog/product')->getCollection()
->setStoreId($this->getStoreId())
->addIdFilter($this->_productIds)
->addAttributeToSelect(Mage::getSingleton('sales/quote_config')->getProductAttributes())
->addOptionsToResult()
->addStoreFilter()
->addUrlRewrite()
->addTierPriceData();这方面的问题是,下面一行:
->addAttributeToSelect(Mage::getSingleton('sales/quote_config')->getProductAttributes())它将只获得在Config.xml中为引号项定义的属性:
<quote>
<item>
<product_attributes>
<sku/>
<type_id/>
<name/>
<status/>
<visibility/>
<price/>
<weight/>
<url_path/>
<url_key/>
<thumbnail/>
<small_image/>
<tax_class_id/>
<special_from_date/>
<special_to_date/>
<special_price/>
<cost/>
<is_recurring/><!-- for totals calculation, placing and processing order -->
<recurring_profile/><!-- for placing order -->
<gift_message_available/>
</product_attributes>
</item>
</quote>这将无法获得我想要的新的自定义属性,而且规则将永远无法正确地将数据与期望值进行比较。
将下面的xml添加到我的自定义销售模块config.xml中,解决了这个问题,该模块中包含一些用于其他内容的观察者。
<sales>
<quote>
<item>
<product_attributes>
<exclude_from_coupon/>
</product_attributes>
</item>
</quote>
</sales>,那么这一切都成功了!
为什么在企业版magento中工作?
不太清楚。我认为Enterprise可能正在寻找实际属性定义上的设置,并将其包含到要收集的属性列表中,然后返回数据。我将对此进行研究,并将其更新到文章中。
至少我现在知道真正的问题是什么,以及购物车规则条件(优惠券)失败的原因。
感谢所有帮助我提出好的问题和建议的人。
又有一天更明智了.
https://stackoverflow.com/questions/9202823
复制相似问题