Aufruf des Warenkorbs im EN-Sprachhop gibt seit Update auf 5.6.7 Fehler

Hallo,

der Aufruf des Warenkorbs www.domain.tld/ en /checkout/cart gibt nachfolgenden Fehler. Der Warenkorb im Hauptshop (www.domain.tld/ de /checkout/cart) kann fehlerfrei aufgerufen werden. Das ist erst seit dem Update auf Shopware 5.6.7 so. Mit SW 5.6.6 war das Verhalten noch fehlerfrei und beide Sprachshops haben sich gleich verhalten.

Fatal error : Uncaught TypeError: Return value of Shopware_Controllers_Frontend_Checkout::isShippingAllowed() must be of the type bool, null returned in /var/www/clients/client1/web5/web/beta/engine/Shopware/Controllers/Frontend/Checkout.php:2192 Stack trace:
#0 /var/www/clients/client1/web5/web/beta/engine/Shopware/Controllers/Frontend/Checkout.php(180): Shopware_Controllers_Frontend_Checkout->isShippingAllowed()
#1 /var/www/clients/client1/web5/web/beta/engine/Library/Enlight/Controller/Action.php(192): Shopware_Controllers_Frontend_Checkout->cartAction()
#2 /var/www/clients/client1/web5/web/beta/engine/Library/Enlight/Controller/Dispatcher/Default.php(478): Enlight_Controller_Action->dispatch()
#3 /var/www/clients/client1/web5/web/beta/engine/Library/Enlight/Controller/Front.php(228): Enlight_Controller_Dispatcher_Default->dispatch()
#4 /var/www/clients/client1/web5/web/beta/engine/Shopware/Kernel.php(188): Enlight_Controller_Front->dispatch()
#5 /var/www/clients/client1/web5/web/beta/vendor/symfony/http-kernel/HttpCach in /web/engine/Shopware/Controllers/Frontend/Checkout.php  on line  2192

So weit ich das nachvollziehen kann, funktionieren alle anderen Seiten - auch im Checkout - in beiden Sprachshops fehlerfrei.

PHP 7.4.6 / NGINX

Kennt jemand den Fehler oder die Lösung des Fehlers oder kann mir zumindest den Weg weisen, um das Problem zu lösen?

 

Das hat irgendwas mit den Lieferländern zu tun.

Hast du eine abweichende Konfiguration für den Sprachshop in den Länder-Einstellungen?

Hallo und danke,

alle Kästchen in der EN-Spracheinstellung der Länder für „Als Lieferland zugelassen“ waren deaktiviert. Seit wann ist diese Einstellung denn dazu gekommen? In der letzten SW-Version hatte es ja noch so funktioniert.

Seit ich das Default-Land Deutschland im Sprachshop aktiviert habe, ist der Fehler weg.

Gibt es eine Möglichkeit das Flag auf einmal für alle Länder im Sprachshop zu setzen, oder muss ich mich da manuell durchklicken?

Danke für den Hinweis, ein Kunde hatte das Update schon gemacht und den gleichen Fehler erhalten…

 

Hoppala, das klingt übel. 

Wenn dem so ist kann kein englischsprachiger Besteller aus dem Ausland mehr ordern, bzw. bekommt Fehlermeldungen ?

Ich hab das bei uns geprüft, auf Englisch sind nun alle Länder nicht mehr als Lieferland aktiv. 

 

 

Moin zusammen!

Ich habe soeben versucht das genannte Verhalten nachzustellen, bin aber kläglich daran gescheitert.
Habt ihr einen gezielten Weg gefunden das nachzustellen?

Was ich getan habe:

  • Hauptshop + Demoshop angelegt
  • Im Hauptshop diverse Länder zugelassen, manch andere nicht
  • Für den Sprachshop keinerlei Einstellungen diesbezüglich getätigt
  • Warenkorb im Haupt- sowie Sprachshop aufgerufen
  • Kein Problem auf diese Art

Übrigens:
Wenn ihr noch keine Einstellung getätigt habt am Sprachshop, müsste er die Einstellung vom Hauptshop vererbt bekommen. Heißt also nicht, dass nun alle Länder im Sprachshop als “Lieferland zulassen: Nein” gelten. 

Falls jemand von euch das gezielter nachstellen kann, gerne melden, noch besser mit @ Markierung, damit ich darauf aufmerksam werde. :slight_smile:

Lieben Gruß,
Shopware Patrick Stahl

Hallo Patrick,

vielleicht liegt es daran, dass der Shop schon seit 4.x upgedated wird? Ich hab das jetzt ganz pragmatisch gelöst und die im Hauptshop aktivierten und als Lieferland zugelassenen Länder auch manuell im Sprachshop aktiviert. Das funktioniert ja dann fehlerfrei.

Falls es was zur Fehlersuche beiträgt, kann ich wahlweise gerne einen BE-Zugang für Dich einrichten, oder eine Datenbanksicherung vor dem Update zur Verfügung stellen (das sollte ich nur bald wissen, da der Provider die Backups nur 7 Tage aufbewahrt)

Moin @drakon‍,

eine Datenbanksicherung wäre super! :slight_smile:
Die kann ich dann einfach mal untersuchen. Gerne per PN, entweder hier oder in unserem Community Slack.

Liebe Grüße,
Shopware Patrick Stahl

Moin zusammen!

Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :slight_smile:
Vielen Dank dafür!
Das betrifft entsprechend definitiv nicht alle Shops, sondern nur welche, die einen gewissen alten “Übersetzungs-Zustand” besitzen.

Eine entsprechende interne Änderungsabfrage ist bereits auf dem Weg.
Für euch als mögliche Hotfixes bis dahin:

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern
    oder

  2. Nach den hier markierten Zeilen den folgenden Code anfügen: 

    if (!array_key_exists(‘allow_shipping’, $countryTranslations[$countryId])) {
    return $allowedByDefault;
    }

Die gesamte Methode sähe dann so aus:
 

private function isShippingAllowed(int $countryId): bool
{
    $queryBuilder = $this->get('dbal_connection')->createQueryBuilder();

    $allowedByDefault = (bool) $queryBuilder->select('allow_shipping')
        ->from('s_core_countries', 'countries')
        ->where('countries.id = :countryId')
        ->setParameter(':countryId', $countryId)
        ->execute()
        ->fetchColumn();

    $countryTranslations = $this->get('modules')->sAdmin()->sGetCountryTranslation();

    if (!$countryTranslations) {
        return $allowedByDefault;
    }

    if (!array_key_exists($countryId, $countryTranslations)) {
        return $allowedByDefault;
    }

    if (!array_key_exists('allow_shipping', $countryTranslations[$countryId])) {
        return $allowedByDefault;
    }

    return $countryTranslations[$countryId]['allow_shipping'];
}

Ich hoffe, dass euch dies erstmal weiter hilft! :slight_smile:

Liebe Grüße,
Shopware Patrick Stahl

2 „Gefällt mir“

@Patrick Stahl schrieb:

Moin zusammen!

Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :slight_smile:
Vielen Dank dafür!
Das betrifft entsprechend definitiv nicht alle Shops, sondern nur welche, die einen gewissen alten „Übersetzungs-Zustand“ besitzen.

Eine entsprechende interne Änderungsabfrage ist bereits auf dem Weg.
Für euch als mögliche Hotfixes bis dahin:

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern
    oder
  2. Nach den hier markierten Zeilen den folgenden Code anfügen: 

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

Die gesamte Methode sähe dann so aus:
 

private function isShippingAllowed(int $countryId): bool
{
$queryBuilder = $this->get(‚dbal_connection‘)->createQueryBuilder();

$allowedByDefault = (bool) $queryBuilder->select(‚allow_shipping‘)
->from(‚s_core_countries‘, ‚countries‘)
->where(‚countries.id = :countryId‘)
->setParameter(‚:countryId‘, $countryId)
->execute()
->fetchColumn();

$countryTranslations = $this->get(‚modules‘)->sAdmin()->sGetCountryTranslation();

if (!$countryTranslations) {
return $allowedByDefault;
}

if (!array_key_exists($countryId, $countryTranslations)) {
return $allowedByDefault;
}

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

return $countryTranslations[$countryId][‚allow_shipping‘];
}

Ich hoffe, dass euch dies erstmal weiter hilft! :slight_smile:

Liebe Grüße,
Shopware Patrick 

 

HALLO;

WO FINDE ICH.

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern

gRU?

 

@allshop schrieb:

@Patrick Stahl schrieb:

Moin zusammen!

Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :slight_smile:
Vielen Dank dafür!
Das betrifft entsprechend definitiv nicht alle Shops, sondern nur welche, die einen gewissen alten „Übersetzungs-Zustand“ besitzen.

Eine entsprechende interne Änderungsabfrage ist bereits auf dem Weg.
Für euch als mögliche Hotfixes bis dahin:

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern
    oder
  2. Nach den hier markierten Zeilen den folgenden Code anfügen: 

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

Die gesamte Methode sähe dann so aus:
 

private function isShippingAllowed(int $countryId): bool
{
$queryBuilder = $this->get(‚dbal_connection‘)->createQueryBuilder();

$allowedByDefault = (bool) $queryBuilder->select(‚allow_shipping‘)
->from(‚s_core_countries‘, ‚countries‘)
->where(‚countries.id = :countryId‘)
->setParameter(‚:countryId‘, $countryId)
->execute()
->fetchColumn();

$countryTranslations = $this->get(‚modules‘)->sAdmin()->sGetCountryTranslation();

if (!$countryTranslations) {
return $allowedByDefault;
}

if (!array_key_exists($countryId, $countryTranslations)) {
return $allowedByDefault;
}

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

return $countryTranslations[$countryId][‚allow_shipping‘];
}

Ich hoffe, dass euch dies erstmal weiter hilft! :slight_smile:

Liebe Grüße,
Shopware Patrick 

 

HALLO;

WO FINDE ICH.

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern

gRU?

 

Grundeinstellungen > Shopeinstellungen > Länder: z.B. Deutschland wählen + Übersetzung von „Name“

@nordicecom schrieb:

@allshop schrieb:

@Patrick Stahl schrieb:

Moin zusammen!

Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :slight_smile:
Vielen Dank dafür!
Das betrifft entsprechend definitiv nicht alle Shops, sondern nur welche, die einen gewissen alten „Übersetzungs-Zustand“ besitzen.

Eine entsprechende interne Änderungsabfrage ist bereits auf dem Weg.
Für euch als mögliche Hotfixes bis dahin:

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern
    oder
  2. Nach den hier markierten Zeilen den folgenden Code anfügen: 

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

Die gesamte Methode sähe dann so aus:
 

private function isShippingAllowed(int $countryId): bool
{
$queryBuilder = $this->get(‚dbal_connection‘)->createQueryBuilder();

$allowedByDefault = (bool) $queryBuilder->select(‚allow_shipping‘)
->from(‚s_core_countries‘, ‚countries‘)
->where(‚countries.id = :countryId‘)
->setParameter(‚:countryId‘, $countryId)
->execute()
->fetchColumn();

$countryTranslations = $this->get(‚modules‘)->sAdmin()->sGetCountryTranslation();

if (!$countryTranslations) {
return $allowedByDefault;
}

if (!array_key_exists($countryId, $countryTranslations)) {
return $allowedByDefault;
}

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

return $countryTranslations[$countryId][‚allow_shipping‘];
}

Ich hoffe, dass euch dies erstmal weiter hilft! :slight_smile:

Liebe Grüße,
Shopware Patrick 

 

HALLO;

WO FINDE ICH.

  1. Die Länder-Übersetzungen einfach einmal öffnen und neu speichern

gRU?

 

Grundeinstellungen > Shopeinstellungen > Länder: z.B. Deutschland wählen + Übersetzung von "Name

 

Hallo!

  • wir haben das Problem bei allen Shops, also nicht nur bei den Sprachshops
  • muss man wirklich alle Ländernamen einzeln öffnen und abspeichen? 
  • @PatrickStahl: „Eine entsprechende interne Änderungsabfrage ist bereits auf dem Weg.“ - Ist diese bereits da? - Wir möchten nämlich nur ungern selbst in den Code eingreifen. 

 

Auch von mir ein Danke!

Auch bei uns funktionierten im Sprachshop /checkout/cart bzw. teilweise auch /checkout/confirm nicht. Ursache war ebenfalls der fehlende Haken “Lieferland zulassen” beim entsprechenden Land in den Ländereinstellungen. Allerdings ist die Verhaltensweise etwas merkwürdig. Wir haben einzelne Länder, die im Sprachshop gar nicht aktiv sind, sondern nur im Hauptshop. In dem Fall tritt der Fehler aber nicht auf. Liegt vermutlich daran, dass die Einstellungen aus dem Hauptshop vererbt werden, wie Patrick Stahl bereits geschrieben hat. Aber das Land ist im Sprachshop auswählbar, was nach meinem Verständnis gar nicht gehen sollte, wenn es im Sprachsop nicht aktiv ist?! Erst, wenn es aktiviert und anschließend deaktiviert wird, ist es nicht mehr auswählbar.

Der Fehler ist nur zufällig aufgefallen. Natürlich unschön, da das Update schon ein paar Wochen her ist. Es ist schade, dass es Fehler gibt, bei denen nur eine leere Seite ausgegeben wird, respektive die Browser-Fehlermeldung “Diese Seite funktioniert nicht. xxx kann diese Anfrage momentan nicht verarbeiten. HTTP ERROR 500”
Ich denke, dass die meisten Nutzer damit nichts anfangen können. Es wäre immer schön, wenn der Nutzer irgendwie im Shop landet mit Fehlermeldung.

@Patrick Stahl schrieb:

  1. Nach den hier markierten Zeilen den folgenden Code anfügen: 

if (!array_key_exists(‚allow_shipping‘, $countryTranslations[$countryId])) {
return $allowedByDefault;
}

Hallo, Patrick!

Ich habe die o.g. Code hinzugefügt. Das hat aber leider nicht geholfen. Soll ich folgende Code auch hinzufügen? Wenn ja, wohin?

private function isShippingAllowed(int $countryId): bool
{
    $queryBuilder = $this->get('dbal_connection')->createQueryBuilder();

    $allowedByDefault = (bool) $queryBuilder->select('allow_shipping')
        ->from('s_core_countries', 'countries')
        ->where('countries.id = :countryId')
        ->setParameter(':countryId', $countryId)
        ->execute()
        ->fetchColumn();

    $countryTranslations = $this->get('modules')->sAdmin()->sGetCountryTranslation();

    if (!$countryTranslations) {
        return $allowedByDefault;
    }

    if (!array_key_exists($countryId, $countryTranslations)) {
        return $allowedByDefault;
    }

    if (!array_key_exists('allow_shipping', $countryTranslations[$countryId])) {
        return $allowedByDefault;
    }

    return $countryTranslations[$countryId]['allow_shipping'];
}

 

bei mir funktioniert komischerweise 1 Sprachshop von 4. https://www.kosmetikfriseurmassage.de

Also DE und EN funktioniert
ES, IT, FR funktioniert nicht

Ich habe eine temporere Lösung gefunden: Offcanwas Warenkorb ausschalten

damit kann man wenigstens Bestellung durchführen. Rollover für Warenkorb funktioniert nur für DE und EN

Wir bekommen den Warenkorb in einem Sprachshop einfach nicht zum Laufen  Foot-in-Mouth

Es sind alle Versandarten da, die Zahlungsarten stimmen auch. Bei den Ländern waren tatsächlich in den Grundeinstellungen wie oben beschrieben im betroffenen Sprachshop alle inaktiv und der Haken bei „als Lieferland zulassen“ fehlte auch.

Wir haben jetzt alle aktiviert und zugelassen. Wenn ich unter „Warenkorb bearbeiten“ gehe und die Übersichtseite auf den Sprachshop wechsle, dann kann ich auch Lieferland, Versandart und Zahlungsart konfigurieren.

Sobald ich aber auf das Warenkorb-Logo drücke, öffnet sich ein weißer Rand und das wars. So wie ich Firefox lese, kommt da rechts ein 404.

Was übersehen wir denn?

Hi Patrick!

Ich habe mit dem aktuellsten Shopware für 2 Shops Sprachshops EN angelegt. Gestern und heute. Das gleiche Problem betrifft beide Shops. Im englischen Sprachshop kann „Proceed to checkout“ nicht geklickt werden. Das noch bevor angegeben wurde in welchem Land man sich befindet.

Gilt der Lösungsweg immernoch? Gibt es inzwischen eine andere Methode das Sprachpaket up to date zu bringen?
Ich habe sogar versucht den Sprachshop komplett neu anzulegen - auch das hilft nicht.

Für Hilfe wäre ich sehr dankbar!

PS: Den Offcanvas Warenkorb zu deaktivieren hat auch nichts gebracht. Auf der Kassenseite steht dann „No shipping type“, obwohl die Versandarten für alle Shops gelten.

Moin!

Sorry, bin hier leider nicht mehr wirklich im Thema. Afaik müsste das Problem im Kern aber schon mit Shopware 5.6.8 oder Shopware 5.7.0 behoben worden sein.

Aber, wie gesagt: Bin leider nicht mehr wirklich aktiv in Shopware 5 unterwegs.

Hast du den Lösungsweg denn mal ausprobiert? Da dürfte ja nichts kaputt gehen.

Liebe Grüße,
Patrick

Danke Patrick… der Code sah bei mir bereits so aus, wie von dir vorgeschlagen. Die Zeile war in meiner aktuellen Shopware-Version so bereits enthalten.

Dennoch funktioniert der Checkout im Sprachshop leider nicht.