Maison > Questions et réponses > le corps du texte
P粉7104549102023-09-02 14:33:53
Découvrez si la remise a été ajoutée au panier par identifiant de référence. Si tel est le cas, supprimez simplement l'ancienne instance de votre panier et ajoutez la remise recalculée.
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);
De plus, vous devez également vous assurer que votre processeur s'exécute après celui de Shopware PromotionProcessor
, sinon il essaiera de ré-ajouter la remise que vous avez précédemment ajoutée manuellement.
<service id="MyPlugin\Cart\CustomPromotionProcessor"> <!-- ... inject after default discount cart processor (3700) --> <tag name="shopware.cart.processor" priority="3600"/> </service>
J'ai créé un exemple de plugin qui contient toutes les modifications du guide nécessaires au recalcul. Dans la version candidate actuelle 6.5
上进行了测试,但也应该适用于最新版本的 6.4
.
Cet exemple est basé sur une remise en pourcentage de la valeur du panier. Si la remise doit correspondre à la valeur absolue du changement, le processus est légèrement différent. J'ai créé un fork dans le référentiel ci-dessus et fourni un exemple.