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 Likes

@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.