P粉7104549102023-09-02 14:33:53
通过引用标识符查找折扣是否已添加到购物车。如果是,只需从购物车中删除旧实例,然后再添加重新计算的折扣即可。
if ($original->has($discountLineItem->getId())) { $original->get($discountLineItem->getId())->setRemovable(true); $original->remove($discountLineItem->getId()); return; } // $discountLineItem->getType() should equal LineItem::DISCOUNT_LINE_ITEM $toCalculate->add($discountLineItem);
此外,您还必须确保您的处理器在 Shopware 自己的 PromotionProcessor
之后执行,否则它将尝试重新添加您之前手动添加的折扣。
<service id="MyPlugin\Cart\CustomPromotionProcessor"> <!-- ... inject after default discount cart processor (3700) --> <tag name="shopware.cart.processor" priority="3600"/> </service>
我创建了一个示例插件,其中包含重新计算所需的指南中的所有更改。在当前候选版本 6.5
上进行了测试,但也应该适用于最新版本的 6.4
。
该示例基于购物车价值百分比形式的折扣。如果折扣应该是变化的绝对值,则过程会略有不同。我在上述存储库中创建了一个分支,并提供了一个示例。