4

我已经制作了一张优惠券 [coupon_code = SWIMFREE],如果categoryisswimming equipment并且hobbyisswimming将折扣 50%。

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

  1. 结帐车:申请优惠券
  2. 第一步:送货和账单地址
  3. 第二步:选择你的爱好(有另一个sales_flat_quote tablesales_flat_quote_hobby
  4. 最后一步:结帐->概述

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

爱好步骤后如何截取优惠券?


一步一步的示例案例:

1.在购物车上已经添加

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

2. 关于运输和计费步骤

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

3. 关于爱好步骤

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

4.然后在概述步骤

  • 泳衣的价格是 50 美元(游泳装备类别)
  • Kevlar 的价格是 50 美元(射击器材类)
  • Coupon Applied SWIMFREE,Grand Total 现在是 150 美元(因为爱好不是游泳)

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

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

4

3 回答 3

5

我自己已经找到了答案:

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

优惠券示例

重写 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,则不会使用优惠券。

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

于 2012-08-23T10:09:30.843 回答
2

您应该实现自定义收集器来收集总计。它可以基于Mage_SalesRule_Model_Quote_Discount.
如何创建自定义收集器:请参阅stackoverflow 答案,或者您可以查看本文

于 2012-08-20T11:22:13.557 回答
2

是的,这将是我的想法。

您实施了一个新的 salesrule 条件,它提供 50% 的折扣。

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

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

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

于 2012-08-21T14:30:37.797 回答