Есть ли событие или место, к которому я могу подключиться, когда правило цены корзины покупок больше не действует (например, когда оно истекает или если вы изменили количество других продуктов, где оно больше не применяется)? Я знаю, что он автоматически удаляется из корзины, но не могу найти место, где это происходит в коде.
Я пишу модуль, который добавляет бесплатный продукт в корзину для купона, в котором промежуточный итог превышает сумму X. Это все работает, за исключением уменьшения количества товаров в корзине, где промежуточный итог опускается ниже X. Купон удаляется, но мой продукт остается в корзине.
До сих пор я использовал следующие события, чтобы сделать то, что мне нужно ...
salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before
Я нашел то, Magento\Quote\Model\CouponManagement
что казалось многообещающим, поскольку у него есть методы set()
и remove()
методы, но, похоже, их не вызывают при обновлении корзины.
В checkout_cart_update_items_after
этом также кажется логичным местом, которое я могу проверить, но кажется, что правило все еще установлено в соответствии с$cart->getQuote()->getAppliedRuleIds()
ОБНОВЛЕНИЕ: я закончил тем, что добавил наблюдателя для checkout_cart_save_after
события, которое запускается после, collectTotals()
так что он знает, есть ли правило в корзине или нет. Затем я в основном сравниваю $quote->getAppliedRuleIds()
с тем, $quote->getOrigData('applied_rule_ids')
чтобы увидеть, было ли удалено правило. Я чувствую, что есть лучший способ сделать это, но это работает на данный момент. У меня все еще есть проблема с купонами, которые истекают, хотя ...
источник
Ответы:
Я бы сделал это с плагином вокруг
Там у вас есть параметр $ rules, который будет массивом, содержащим старые идентификаторы применяемых правил, а результатом вызова $ progress () будет массив примененных идентификаторов. Возможно, можно найти лучшее место, если вы раскроете, что вы собираетесь с ним делать.
источник