【问题标题】:Magento observer - Which event to use when a coupon code is canceledMagento 观察者 - 取消优惠券代码时使用哪个事件
【发布时间】:2015-07-22 01:00:56
【问题描述】:

我正在构建一个模块,当输入特定的优惠券代码时,它会将免费产品添加到购物车中。

我有一个事件观察器,当在购物篮中应用新的优惠券代码时会触发: 我的配置中的事件是这样的:

<events>
    <salesrule_validator_process>
        <observers>
            <checkoutApplyCouponToProduct>
                <type>singleton</type>
                <class>Sulman_Giftwithcoupon_Model_Checkout_Observer</class>
                <method>applyCoupon</method>
            </checkoutApplyCouponToProduct>
        </observers>
    </salesrule_validator_process>  
</events>

这可以正常工作,如果添加了正确的优惠券代码,我可以成功添加免费产品。

现在我需要做的是,如果优惠券代码被客户取消,我需要删除免费产品。

但是当优惠券被取消时,我正在使用的事件不会触发。

有没有可以用来检查优惠券代码是否被删除的事件?

谢谢

【问题讨论】:

    标签: magento magento-1.9


    【解决方案1】:

    我可能会观察controller_action_predispatch_checkout_cart_couponPost 事件并检查是否设置了remove 参数,这是触发Mage_Checkout_CartController::couponPostAction 删除优惠券的原因。

    etc/config.xml

    <config>
        <global>
            <events>
                <controller_action_predispatch_checkout_cart_couponPost>
                    <observers>
                        <checkoutRemoveCouponProduct>
                            <type>singleton</type>
                            <class>Sulman_Giftwithcoupon_Model_Checkout_Observer</class>
                            <method>removeCoupon</method>
                        </checkoutRemoveCouponProduct>
                    </observers>
                </controller_action_predispatch_checkout_cart_couponPost>
            </events>
        </global>
    </config>
    

    模型/Observer.php

    public function removeCoupon(Varien_Event_Observer $observer)
    {
        /* @var Mage_Core_Controller_Front_Action $controller */
        $controller = $observer->getControllerAction();
        if ($controller->getRequest()->getParam('remove') == 1) {
            // @TODO add logic to remove free product
        }
        return $this;
    }
    

    【讨论】:

    • 完美!该事件包括添加和删除优惠券:)
    • @sulman - 从某种意义上说,它在添加和删除过程中都会发生,但是您不应使用此事件来表示“已添加优惠券”,因为此时优惠券尚未执行已经过验证并应用于报价。所以你只是假设输入的代码是正确的。
    • 好点。就我而言,这还不算太糟糕。但我必须做一些有效性检查以确保一切正常(有效的客户组,日期等)。谢谢。
    【解决方案2】:

    你可以在couponPostAction()动作中触发你的自定义事件

    app/code/core/Mage/Checkout/controllers/CartController.php

    在此您将看到处理错误优惠券的代码,以及优惠券表格是否没有价值。您可以在那里触发您的自定义事件并在您的模块中侦听该事件。 希望这会做你的工作。 谢谢

    【讨论】:

    • 你会看到 $this->_getSession()->addSuccess($this->__('Coupon code was cancelled.'));在此函数中和此行上方,您可以触发您的自定义事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2012-05-18
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多