Magento observer - 取消优惠券代码时使用哪个事件

Magento observer - Which event to use when a coupon code is canceled

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

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

<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>

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

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

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

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

谢谢

您可以在

中的 couponPostAction() 操作中触发您的自定义事件

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

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

我可能会观察 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>

Model/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;
}