购物车规则正好相反

时间:2012-02-08 22:55:22

标签: magento

我们添加了“是/否”产品属性,标记为:“允许此产品应用优惠券吗?”默认值为“是”。

原因是,我们绝不希望销售团队在数千种核心产品中提供折扣。

我们可以将这些产品作为SKU添加到创建的千张优惠券中的每一张上,但是可以随意更改,或者由创建优惠券的销售团队不正确地列出。

因此,我们已要求他们将此规则添加到新优惠券中,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包含此规则。

enter image description here

当我在Magento 1.5社区版上测试规则时,它与条件所说的完全相反。

当我在我们的其他企业解决方案(magento 1.9)上测试相同的规则时,它实际上做了它应该做的事情。

当我在购物车中有一个产品,作为此属性设置为“否”的产品,并且我应用优惠券代码时,它接受优惠券代码。在另一个系统(企业)上,它应该拒绝它。

还有其他人遇到过这个吗?

更新: 好的,这只是更有趣。 当我逐步完成规则类时,产品已通过,但产品属性未通过。范围设置为网站,我确实检查了它是否在后端保存在该范围内。

这真的很奇怪......

在企业系统上,具有相同配置和数据的产品属性即将到来。

我甚至试图没有双重否定,另有新的属性,以确保。 根据以下规则运行,优惠券被拒绝:“优惠券代码无效。” 这是正确的,因为产品设置为“可以使用优惠券?=否”。

enter image description here

但问题是我不想对所有其他产品进行检查,而是针对少数被标记为“否”的产品。

这对我们来说无论如何都不适用,因为如果购物车中的任何产品的属性为“可以使用优惠券?”的值为“否”,我们不想申请优惠券。 / p>

这是一个双重否定规则,无论你以何种方式看待它。

我通过validate()函数逐步执行/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product.php,第二次添加产品时,数据显示在属性中,但是当我重新申请优惠券并再次执行此功能时,这些价值就消失了。这很奇怪。

将新产品添加到购物车时: before Adding Coupon

重新申请优惠券代码时: after re-applying coupon

heck做了哪些描述,其他一些属性消失了?

更新说明我越来越近了。 当我从以下内容更改“/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);
}

To This:

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);
}
  

然后工作正常!

2 个答案:

答案 0 :(得分:6)

找出实际问题,以下是我为解决方案所做的工作:

以下位获取购物车价格规则的产品数据:

        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 / Abstract.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可能正在寻找实际属性定义的设置,并将其包含在要收集的属性列表中,然后返回它的数据,我的猜测。我将对此进行研究,并将其更新到帖子中。

至少我现在知道真正的问题是什么,以及购物车规则条件(优惠券)失败的原因。

感谢所有帮助我提出一些好问题和建议的人。

另一天用magento明智了......

答案 1 :(得分:0)

我用Magento CE 1.5.1.0对此进行了测试,无法重现您的问题。对我来说,它有效。

请重新检查以下CE安装:

  • 您将默认属性值设置为“是”
  • 您确实根据需要重新索引了索引。
  • 您编辑了一个测试产品,并明确将属性值设置为“no”。
  • (只是为了确定)您更新了缓存。
  • 您完全按照上述说明设置购物车价格规则(如果条件为FALSE且allow设置为NO,则应用。)

如果您没有任何自定义代码干扰,这应该有效。它在默认安装中。

如果仍然无效:

  • 如果您将条件重新措辞仅适用于所有条件都为TRUE并且allow设置为TRUE(确实删除了更复杂的双重否定),会发生什么?
  • 请发布购物车价格规则,产品属性和产品的后端表单截图。