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
。
此範例是基於購物車價值百分比形式的折扣。如果折扣應該是變化的絕對值,則過程會略有不同。我在上述儲存庫中建立了一個分支,並提供了一個範例。