Magento 购物车的规则正好相反

Magento 购物车的规则正好相反,magento,Magento,我们添加了一个“是/否”产品属性,标签为:“允许此产品应用优惠券?”默认值为“是” 原因是,我们从不希望销售团队在数千种可用的核心产品中提供折扣 我们可以将这些产品作为SKU添加到所创建的1000张优惠券中的每一张,但这可能会因意外而更改,或被创建优惠券的销售团队不当地列出 因此,我们要求他们在新优惠券中加入这一规则,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包括此规则 当我在Magento 1.5社区版上测试该规则时,它所做的与条件所说的完全相反 当我在另一个企业解决方案(mag

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

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

我们可以将这些产品作为SKU添加到所创建的1000张优惠券中的每一张,但这可能会因意外而更改,或被创建优惠券的销售团队不当地列出

因此,我们要求他们在新优惠券中加入这一规则,以排除这些产品。我们还通过代码更新了所有其他优惠券,以包括此规则

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

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

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

还有其他人见过这个吗

更新: 好吧,这才变得更有趣。 当我遍历规则类时,传递了产品,但没有传递产品属性。范围设置为website,我检查了它是否保存在后端的该范围下

这真的很奇怪

在企业系统上,具有相同配置和数据的产品属性正在通过

我甚至试着不让双重否定,用另一个新的属性,以确保。 违反以下规则运行时,优惠券将被拒绝:“优惠券代码无效。” 这是正确的,因为产品设置为“可以使用优惠券?=否”

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

无论如何,这对我们来说是行不通的,因为如果购物车中有任何产品的属性“Can use优惠券?”的值为“No”,我们就不想应用优惠券

这是一条双重否定规则,不管你从哪个角度看。

第二次添加产品时,我通过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 CE 1.5.1.0对此进行了测试,无法重现您的问题。对我来说,这很有效

请重新检查以下CE安装:

  • 将默认属性值设置为“是”
  • 您确实根据需要重新索引了索引
  • 您编辑了一个测试产品,并将属性值显式设置为“否”
  • (只是为了确保)您更新了缓存
  • 您完全按照上面所述设置购物车价格规则(如果条件为FALSE且允许设置为NO,则应用)
如果您没有任何自定义代码干扰,这应该可以工作。它在默认安装中不起作用

如果仍然不起作用:

  • 如果将条件重新表述为仅在所有条件均为TRUE且allow设置为TRUE时应用(是否删除了更复杂的双负数),会发生什么情况
  • 请发布购物车价格规则、产品属性和产品的后端表单截图

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

请重新检查以下CE安装:

  • 将默认属性值设置为“是”
  • 您确实根据需要重新索引了索引
  • 您编辑了一个测试产品,并将属性值显式设置为“否”
  • (只是为了确保)您更新了缓存
  • 您完全按照上面所述设置购物车价格规则(如果条件为FALSE且允许设置为NO,则应用)
如果您没有任何自定义代码干扰,这应该可以工作。它在默认安装中不起作用

如果仍然不起作用:

  • 如果将条件重新表述为仅在所有条件均为TRUE且allow设置为TRUE时应用(是否删除了更复杂的双负数),会发生什么情况
  • 请发布购物车价格规则、产品属性和产品的后端表单截图

    • 找到了实际问题,下面是我为解决问题所做的:

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

              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>
      
      
      
      这不会让你失望
      <sales>
          <quote>
              <item>
                  <product_attributes>
                      <exclude_from_coupon/>
                  </product_attributes>
              </item>
          </quote>                
      </sales>