自定义条件的购物车规则?

时间:2012-08-08 11:57:38

标签: php magento cart shopping magento-rules

我订了优惠券[coupon_code = SWIMFREE] 如果categoryswimming equipmenthobbyswimming,则折扣率为50%。

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

  1. 结帐购物车:申请优惠券
  2. 第一步:送货和结算 地址
  3. 第二步:选择你的爱好(有另一个sales_flat_quote tablesales_flat_quote_hobby
  4. 最后一步:Checkout->概述
  5. 我想要的是:当应用优惠券和爱好游泳时,第三步将价格改为每件产品的价格,优惠券仍在那里展示。

    如何在Hobby步骤后截取优惠券?


    一步一步的案例

    1。在购物车上已添加

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

    2。关于运输和结算步骤

    • 送货和结算地址 - 下一步

    第3。关于爱好步骤

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

    4。在概述步骤

    • 游泳衣的价格是50美元(游泳设备类别)
    • Kevlar的价格是50美元(射击设备类别)
    • 优惠券申请SWIMFREE,Grand Total现在是150美元(因为业余爱好不是游泳)

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

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

3 个答案:

答案 0 :(得分:6)

已经找到了答案:

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

coupon example

  

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

感谢所有参与者。我很感激。

答案 1 :(得分:2)

您应该实现自定义收集器以收集总计。它可以基于Mage_SalesRule_Model_Quote_Discount 如何创建自定义收藏家:请参阅stackoverflow answer,或者您可以查看this article

答案 2 :(得分: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