新增自訂折扣時,在 Shopware 管理面板中編輯訂單時出現問題
P粉811349112
P粉811349112 2023-09-01 17:30:17
0
1
879
<p>我根據文件編寫了自訂購物車折扣https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-discounts 一切正常,當客戶從購物車添加或刪除產品時,折扣會重新計算,但當我想在管理面板中編輯此訂單時,我收到錯誤:</p> <blockquote> <p>未捕獲的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)"} []</p> </blockquote> <p>我透過在程式碼中加入此檢查「解決」了這個問題:</p> <pre class="brush:php;toolbar:false;">if($behavior->hasPermission(self::SKIP_PROMOTION)){ $items = $original->getLineItems()->filterType(self::LINE_ITEM_TYPE); foreach ($items as $item) { $toCalculate->add($item); } return; }</pre> <p>現在,如果我在管理面板中編輯訂單,不會顯示錯誤,但不會再次計算折扣,並且切換「停用自動促銷」不起作用。 </p> <p>是否有任何解決方案可以在編輯操作中按順序重新計算自訂折扣? 當我在管理面板中新增訂單時,一切正常,問題僅在於編輯。 文件對此沒有任何說明。 </p>
P粉811349112
P粉811349112

全部回覆(1)
P粉710454910

透過引用識別碼來尋找折扣是否已加入購物車。如果是,只需從購物車中刪除舊實例,然後再添加重新計算的折扣即可。

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!