Hallo!
Ich muss den Preis für Versandmethoden anzeigen, die nicht in der Kasse ausgewählt werden. Ich habe dekoriert
Shopware\Core\Checkout\Shipping\SalesChannel\ShippingMethodRoute
Service und konfigurierte DI, um meine neue Klasse im Checkout-Controller zu platzieren. Hier ist der Code der Ladefunktion
public function load(Request $request, SalesChannelContext $context, Criteria $criteria): ShippingMethodRouteResponse {
$result = $this->shippingMethodRoute->load($request, $context, $criteria);
$shippingMethods = $result->getShippingMethods()->filterByActiveRules($context);
$cart = $this->cartService->getCart($context->getToken(), $context);
/** @var ShippingMethodEntity $shippingMethod */
foreach ($shippingMethods as $shippingMethod) {
$cartClone = clone $cart;
$cartData = $cartClone->getData();
$deliveries = $cartClone->getDeliveries();
/** @var Delivery $delivery */
foreach ($deliveries as $delivery) {
$delivery->setShippingMethod($shippingMethod);
}
$cartData->set("shipping-method-" . $shippingMethod->getId(), $shippingMethod);
$this->deliveryCalculator->calculate($cartData, $cartClone, $deliveries, $context);
$shippingCost = $cartClone->getDeliveries()->getShippingCosts()->sum()->getTotalPrice();
var_dump($shippingCost);
$shippingMethod->shippingPrice = $shippingCost;
}
return $result;
}
Aber in einigen Fällen funktioniert es richtig, aber manchmal, wenn ich die Versandart ändere, wird ein Preis für alle berechnet, was nicht korrekt ist.