カスタム割引を追加する際に Shopware 管理パネルで注文を編集する際の問題
P粉811349112
2023-09-01 17:30:17
<p>ドキュメントに従ってカスタム ショッピング カートの割引を作成しました https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-discounts
すべて正常に動作します。顧客がカートに商品を追加または削除すると、割引が再計算されますが、管理パネルでこの注文を編集しようとすると、次のエラーが表示されます: </p>
<ブロック引用>
<p> キャッチされない PHP 例外 Shopware\Core\Checkout\Cart\Exception\LineItemNotStackableException: 「識別子 'CHEAPEST_ITEM_CART_DISCOUNT' の品目はスタック可能ではないため、数量を変更できません。」 /var/www/shop/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 として $item) {
$toCalculate->add($item);
}
戻る;
}</pre>
<p>管理パネルで注文を編集すると、エラーは表示されませんが、割引は再計算されず、「自動プロモーションを無効にする」の切り替えも機能しません。 </p>
<p>編集操作時にカスタム割引を順番に再計算する解決策はありますか?
管理パネルに新しい注文を追加すると、すべてが正常に機能します。問題は編集時のみです。
ドキュメントにはこれについて何も記載されていません。 </p>
識別子を参照して、割引がカートに追加されているかどうかを確認します。その場合は、古いインスタンスをカートから削除し、再計算された割引を追加してください。
リーリーさらに、Shopware 独自の
リーリーPromotionProcessor
の後にプロセッサが実行されていることも確認する必要があります。そうしないと、以前に手動で追加した割引を再追加しようとします。私 は、再計算に必要なガイド内のすべての変更を含むサンプル プラグイン を作成しました。現在のリリース候補
6.5
でテストされていますが、最新リリース6.4
でも動作するはずです。この例は、カート価格のパーセンテージとしての割引に基づいています。割引が変更の絶対値である必要がある場合、プロセスは少し異なります。 上記のリポジトリにブランチ を作成し、例を提供しました。