我根據文件編寫了自訂購物車折扣https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-discounts 一切正常,當客戶從購物車添加或刪除產品時,折扣會重新計算,但當我想在管理面板中編輯此訂單時,我收到錯誤:
未捕獲的PHP 異常Shopware\Core\Checkout\Cart\Exception\LineItemNotStackableException:「識別碼為「CHEAPEST_ITEM_CART_DISCOUNT」的訂單項目不可堆疊,且數量無法變更。」在/var/www//vendor/ shopware/core/Checkout/Cart/LineItem/LineItem.php第233行{「例外」:「[物件](Shopware \ Core \ Checkout \ Cart \ Exception LineItemNotStackableException(代碼:0):識別碼為「CHEAPEST_ITEM_CART_DISCOUNT」的訂單項目不可堆疊,且數量無法變更。在 /var/www/shop/vendor/shopware/core/Checkout/Cart/LineItem/LineItem.php:233)"} []
我透過在程式碼中加入此檢查「解決」了這個問題:
if($behavior->hasPermission(self::SKIP_PROMOTION)){ $items = $original->getLineItems()->filterType(self::LINE_ITEM_TYPE); foreach ($items as $item) { $toCalculate->add($item); } return; }
現在,如果我在管理面板中編輯訂單,不會顯示錯誤,但不會再次計算折扣,並且切換「停用自動促銷」不起作用。
是否有任何解決方案可以在編輯操作中按順序重新計算自訂折扣? 當我在管理面板中新增訂單時,一切正常,問題僅在於編輯。 文件對此沒有任何說明。
透過引用識別碼來尋找折扣是否已加入購物車。如果是,只需從購物車中刪除舊實例,然後再添加重新計算的折扣即可。
此外,您還必須確保您的處理器在 Shopware 自己的
PromotionProcessor
之後執行,否則它將嘗試重新新增您先前手動新增的折扣。我創建了一個範例外掛程式,其中包含重新計算所需的指南中的所有變更。在目前候選版本
6.5
上進行了測試,但也應該適用於最新版本的6.4
。此範例是基於購物車價值百分比形式的折扣。如果折扣應該是變化的絕對值,則過程會略有不同。我在上述儲存庫中建立了一個分支,並提供了一個範例。