drakondrakon MemberComments: 1198 Received thanks: 335 Member since: February 2014

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?

 

2 Answers

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9810 Received thanks: 2959 Member since: September 2013

    Das hat irgendwas mit den Lieferländern zu tun.

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

    Quote
    Accepted Answer
  • Patrick StahlPatrick Stahl ModeratorComments: 539 Received thanks: 240 edited June 2020 Member since: August 2011

    Moin zusammen!

    Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :-)
    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! :-)

    Liebe Grüße,
    Shopware Patrick Stahl

    Quote
    Accepted Answer
    Thanked by 2drakon allshop
  • Accepted Answers

Answers

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9810 Received thanks: 2959 Member since: September 2013

    Das hat irgendwas mit den Lieferländern zu tun.

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

    Quote
    Accepted Answer
  • drakondrakon MemberComments: 1198 Received thanks: 335 Member since: February 2014

    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?

  • bluewolfbluewolf MemberComments: 412 Received thanks: 57 Member since: February 2012

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

     

  • XaliXali MemberComments: 37 Received thanks: 3 Member since: December 2018

    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. 

     

     

  • Patrick StahlPatrick Stahl ModeratorComments: 539 Received thanks: 240 edited June 2020 Member since: August 2011

    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. :-)

    Lieben Gruß,
    Shopware Patrick Stahl

  • drakondrakon MemberComments: 1198 Received thanks: 335 Member since: February 2014

    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)

  • Patrick StahlPatrick Stahl ModeratorComments: 539 Received thanks: 240 Member since: August 2011

    Moin @drakon‍,

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

    Liebe Grüße,
    Shopware Patrick Stahl

  • Patrick StahlPatrick Stahl ModeratorComments: 539 Received thanks: 240 edited June 2020 Member since: August 2011

    Moin zusammen!

    Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :-)
    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! :-)

    Liebe Grüße,
    Shopware Patrick Stahl

    Quote
    Accepted Answer
    Thanked by 2drakon allshop
  • allshopallshop MemberComments: 2 Received thanks: 0 Member since: January 2011

    Moin zusammen!

    Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :-)
    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! :-)

    Liebe Grüße,
    Shopware Patrick 

     

    HALLO;

    WO FINDE ICH.

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

    gRU?

     

  • nordicecomnordicecom MemberComments: 9 Received thanks: 5 Member since: January 2018

    Moin zusammen!

    Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :-)
    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! :-)

    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"

  • inprosolarinprosolar MemberComments: 5 Received thanks: 1 Member since: October 2013

    Moin zusammen!

    Dank der Hilfe von @drakon‍ konnte ich das Problem tatsächlich nachstellen und beheben! :-)
    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! :-)

    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. 

     

  • AdeAde MemberComments: 321 Received thanks: 31 edited October 2020 Member since: November 2012

    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.

  • medeomedeo MemberComments: 47 Received thanks: 0 edited November 2020 Member since: November 2019

    2. 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'];
    }

     

  • medeomedeo MemberComments: 47 Received thanks: 0 edited November 2020 Member since: November 2019

    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

  • ROKAStoreROKAStore MemberComments: 62 Received thanks: 2 Member since: February 2014

    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?

Sign In or Register to comment.