我正在构建一个模块,可在输入特定优惠券代码时将免费产品添加到购物车。
我有一个事件观察员,当在篮子中应用新的优惠券代码时会触发: 我的配置中的事件是:
<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>
这项工作正常,如果添加了正确的优惠券代码,我可以成功添加免费产品。
现在我需要做的是在客户取消优惠券代码时删除免费产品。
但是,当优惠券被取消时,我使用的活动不会触发。
是否有可用于检查优惠券代码是否被删除的事件?
由于
答案 0 :(得分:2)
我可能会观察controller_action_predispatch_checkout_cart_couponPost
事件并检查是否设置了remove
参数,这是触发Mage_Checkout_CartController::couponPostAction
删除优惠券的原因。
<强>等/ 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;
}
答案 1 :(得分:0)
您可以在
中的couponPostAction()
操作中触发自定义事件
应用程序/代码/核心/法师/结帐/控制器/ CartController.php
在此您将看到处理错误优惠券的代码以及优惠券表格没有价值的代码。您可以在那里触发自定义事件并在模块中侦听该事件。 希望这能完成你的工作。 感谢