【问题标题】:Shopping Cart Rules with Custom Condition?具有自定义条件的购物车规则?
【发布时间】:2012-08-05 12:47:49
【问题描述】:

我制作了一张优惠券 [coupon_code = SWIMFREE] 如果categoryswimming equipmenthobbyswimming 将折扣50%。

现在我遇到了关于 3 步结帐的问题。这是描述...

  1. 结帐购物车:申请优惠券
  2. 第一步:运输和计费 地址
  3. 第二步:选择你的爱好(还有一个sales_flat_quote tablesales_flat_quote_hobby)
  4. 最后一步:结帐->概览

我想要的是:当优惠券申请并且爱好游泳时,第三步更改价格为每个产品定价,优惠券仍然显示在那里。

Hobby step后如何截取优惠券?


分步举例:

1.已在购物车中添加

  • 泳衣的正常价格是 100 美元(游泳装备类别)
  • Kevlar 的正常价格是 50 美元(射击器材类)
  • 优惠券已申请 SWIMFREE,总计 100 美元(由于优惠券条件)

2。关于运输和计费步骤

  • 送货地址和帐单地址 - 下一个

3.在爱好步骤上

  • 已检查并确认足球爱好(单选按钮)

4.然后在概览步骤中

  • 泳衣价格为 50 美元(游泳装备类)
  • Kevlar 的价格是 50 美元(射击器材类)
  • 已申请 SWIMFREE 优惠券,现在总计 150 美元(因为爱好不是游泳)

我有很多产品,我尝试添加新属性,但它与属性无关,因为它在sales_flat_quote_hobby

我尝试更改 Sales/Model/Quote/Subtotal.php 以设置购物车中的所有产品价格,但似乎没用。

【问题讨论】:

  • 谁能解决这个问题???

标签: php magento cart shopping magento-rules


【解决方案1】:

您应该实现自定义收集器来收集总计。它可以基于Mage_SalesRule_Model_Quote_Discount
如何创建自定义收集器:见stackoverflow answer,也可以查看this article

【讨论】:

    【解决方案2】:

    是的,那是我的想法。

    您实施了一个新的销售规则条件,该条件提供 50% 的折扣。

    每个产品都会调用销售规则。那么你需要检查一下,属性是否为游泳,是否设置了爱好。如果是这种情况,您可以从 %-salesrule 复制其余部分

    您可以在Mage_SalesRule_Model_Validator::process() 中找到要查看的代码

    可在此处找到自我实现条件的示例:https://github.com/magento-hackathon/DiscountForATweet/blob/master/app/code/community/Hackathon/DiscountForATweet/Model/Condition/Tweet.php

    【讨论】:

      【解决方案3】:

      已经自己找到答案了:

      可以创建自定义优惠券条件

      重写 Mage_SalesRule_Model_Rule_Condition_Product

          public function validate(Varien_Object $object){
              if ($this->getAttribute() == 'quote_item_with_hobby') {
      
                  $quote = Mage::getSingleton('checkout/cart')->getQuote();
                  $hobby= $quote->getHobbyByItemId($object->getId());
      
                  if ($hobby){
                      if ($this->getOperator() == '=='){
                          if (strtolower($this->getValue()) == $hobby->getHobby()) return true;
                          else return false;
                      }
                      else if ($this->getOperator() == '!='){
                          if (strtolower($this->getValue()) == $hobby->getHobby()) return false;
                          else return true;
                      }
      
                  }
                  return true;
              }
      
              return parent::validate($object);
          }
      

      这个函数会在每一步加载时被调用。然后检查如果返回true,则使用优惠券,如果返回false,则不会使用优惠券。

      感谢所有参与的人。我很感激。

      【讨论】:

      • 您能否发布完整的答案。我的意思是如何向后端添加自定义条件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多