HolyMoly... Ich hab schon herumgerätselt, was da passiert. Danke für den Tipp mit nur einer qualifizierten Versandart...
Fix dafür (funktioniert zumindest bei mir):
In der /includes/src/Router/Controller/CheckoutController.php die Funktion getActiveShippingMethod hiermit ersetzen:
PHP:
public function getActiveShippingMethod(array $shippingMethods): int
{
if (isset($_SESSION['Versandart'])) {
$_SESSION['AktiveVersandart'] = (int)$_SESSION['Versandart']->kVersandart;
} elseif (!empty($_SESSION['AktiveVersandart']) && GeneralObject::hasCount($shippingMethods)) {
$active = (int)$_SESSION['AktiveVersandart'];
$reduced = \array_reduce($shippingMethods, static function ($carry, $item) use ($active) {
return (int)$item->kVersandart === $active ? (int)$item->kVersandart : $carry;
}, 0);
if ($reduced !== (int)$_SESSION['AktiveVersandart']) {
$_SESSION['AktiveVersandart'] = $this->getShippingService()->getFirstShippingMethod(
\array_map(
static function (stdClass $shippingMethod): ShippingDTO {
return ShippingDTO::fromLegacyObject($shippingMethod);
},
$shippingMethods
),
$this->customerGroupID,
(int)($_SESSION['Zahlungsart']->kZahlungsart ?? '0'),
)->kVersandart ?? 0;
}
} else {
$_SESSION['AktiveVersandart'] = $this->getShippingService()->getFirstShippingMethod(
\array_map(
static function (stdClass $shippingMethod): ShippingDTO {
return ShippingDTO::fromLegacyObject($shippingMethod);
},
$shippingMethods
),
$this->customerGroupID,
$_SESSION['Zahlungsart']->kZahlungsart ?? 0,
)->kVersandart ?? 0;
}
return (int)$_SESSION['AktiveVersandart'];
}
Hier ist genau markiert, was mit dem obigen Code ersetzt werden muss:
https://gitlab.com/jtl-software/jtl...CheckoutController.php?ref_type=tags#L767-802
Technischere Erklärung:
Das ist die gleiche Funktion, aber vertauscht bei der Übergabe an getFirstShippingMehtod die Reihenfolge der Parameter. Ursprünglich wurde die Zahlungsart vor der Kundengruppe übergeben und das ist exakt falsch herum.
Ich hab das auch mit mehreren qualifizierten Versandarten getestet, das funktioniert nach der Änderung ebenfalls noch.