【发布时间】:2026-02-04 08:50:01
【问题描述】:
如果规则优惠券类型为
,我想从 Quote 中删除 SalesRuleMage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON
我有这个代码:
$event = $observer->getEvent();
$quote = $event->getQuote();
$address = $quote->getShippingAddress();
$appliedRule = $event->getRule();
if (strlen($quote->getCouponCode()) > 0) {
$quote->setCouponCode('');
$quote->collectTotals()->save();
}
return $this;
如果我想删除我在 salesRule 中设置的优惠券代码,它可以正常工作。但同样的规则不适用于我上面提到的优惠券类型。
我尝试了一些解决方案,例如遍历报价项目并将 appliedRules 设置为 null 并将 discount amount, value 设置为零,但没有任何效果。例如
$event = $observer->getEvent();
$quote = $event->getQuote();
$address = $quote->getShippingAddress();
$appliedRule = $event->getRule();
$giftcards = $quote->getGiftCards();
$giftCardsData = unserialize($giftcards);
if ($appliedRule->getCouponType() == Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON) {
foreach($quote->getAllVisibleItems() as $item) {
$item->setAppliedRuleIds('');
$item->setDiscountPercent(0);
$item->setDiscountAmount(0);
$item->setBaseDiscountAmount(0);
$item->save();
}
}
或者也尝试在 QUOTE 和 ADDRESS 中将 AppliedRules 设置为 null:
if ($appliedRule->getCouponType() == Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON) {
$address->setAppliedRuleIds('');
$quote->setAppliedRuleIds('');
}
但到目前为止还没有成功。如果有人能告诉我如何从报价中删除 SalesRule,我会非常满意。
顺便说一下上面的代码是在下面运行的
salesrule_validator_process
事件。
【问题讨论】:
标签: magento event-handling magento-1.9