Als Shop Betreiber hat man es nicht leicht. Die Kunden können praktisch zu jedem Zeitpunkt den Einkauf abbrechen und nur in den wenigsten Fällen nehmen sie sich die Zeit einen Fehler oder ein Problem zu melden, damit dieses behoben werden kann. Eine mögliche Ursache für einen Abbruch beim einkaufen, kann ein nicht validierfähiger Domain Name der Mail Adresse sein. Der folgende Artikel beschreibt, wie alle aktuellen Top Level Domains (TLD) in Magento „nachgerüstet“ werden können.
Magento bis einschließlich Version 1.9.x, kann nicht alle neuen Top Level Domains (TLD), die beim Check out als E-Mail Adresse hinterlegt werden, auf Korrektheit hin validieren. Wenn ein Kunde eine Mail Adresse in der Form info@mein.cafe eingibt, erscheint die folgende Fehlermeldung: „„Email“ ist kein gültiger Hostname., ‚mein.cafe‘ scheint ein DNS-Hostname zu sein, aber der TLD-Teil scheint nicht gültig zu sein, ‚mein.cafe‘ scheint ein lokaler Netzwerkname zu sein. Lokale Netzwerknamen sind jedoch nicht erlaubt„. Der Einkauf stoppt hier!
Dies liegt daran, dass für die Domain Name Validierung in Magento eine veraltete Bibliothek aus dem Zend Framework verwendet wird, die die neuen Domain Namen nicht beinhaltet. Als Lösung bieten sich zwei Ansätze an:
Lösung I – eigene Top Level Domain Namen manuell nachrüsten
Auf der Webseite der IANA (Internet Assigned Numbers Authority), die für die Zuordnung von Nummern und Namen im Internet verantwortlich ist, gibt es eine stets aktuelle gepflegte Liste aller TLD. Diese dient als Grundlage für unsere Anpassung. Wem das Anpassen zu viel ist, kann die bereits von mir erstellte TLD Liste verwenden.
- Die Datei Hostname.php kopieren: /lib/Zend/Validate/Hostname.php nach /app/code/local/Zend/Validate/Hostname.php
ACHTUNG: Falls der/die Ordner code/local/Zend/Validate/ nicht existiert, so ist er von Hand zu erstellen!
In der kopierten Datei folgende Änderung/Prüfung vornehmen:
// First check TLD $matches = array(); if (preg_match('/([^.]{2,10})$/i', end($domainParts), $matches) ||
// First check TLD $matches = array(); if (preg_match('/([^.]{2,63})$/i', end($domainParts), $matches) ||
Dies erlaubt neue Top Level Domains (TLD) die länger als 10 Zeichen lang sind.
- Die zuvor erstellt TLD-Liste in das $_validTlds Array einpflegen.
ACHTUNG: Am Ende des Arrays können sich arabische und japanische Schriftzeichen befinden! Also nur von A bis Z tauschen und diese behalten!
Lösung II – Domain Name Validierung deaktivieren
Wie schon in der ersten Lösung , die Datei /lib/Zend/Validate/Hostname.php nach /app/code/local/Zend/Validate/Hostname.php kopieren und zum editieren öffnen.
Den nachflgende Code Block suchen und die 3 Zeilen im if-Block auskommentieren.
if (!in_array($this->_tld, $this->_validTlds)) { // $this->_error(self::UNKNOWN_TLD); // $status = false; // break; }
Dies ist keine Lösung die ich präferiere, aber der Vollständigkeit halber, wollte ich sie genannt haben.
Optional – aktuelle TLD-Liste neu erstellen
Die runter geladene TLD Liste kann in wenigen Schritten, mit Hilfe von Notepad++, in das entsprechende Format gebracht werden.
- Die Datei als .txt Datei abspeichern
- Die Datei mit Notepad++ öffnen, die erste Zeile die mit einem hash (#) beginnt löschen.
- Mit ctrl-h den Suchen und Ersetzen Dialog öffnen.
- Ersetzen am Zeilenanfang
Um an jedem Zeilenanfang ein Hochkomma einzufügen, die Einstellungen entsprechend der nachfolgenden Grafik vornehmen.
Suchen nach: „^“, sucht am Anfang jeder Zeile.
Ersetzen durch: hier 8 Leerzeichen und das Hochkomma eingeben.
Suchmodus: hier muss Reguläre Ausdrücke aktiviert sein.
Abschließend auf Alle ersetzen klicken. - Ersetzen am Zeilenende
Um an jedem Zeilenende ein Hochkomma und ein Komma einzufügen, die Einstellungen entsprechend der nachfolgenden Grafik vornehmen.
Suchen nach: „$“, sucht am Ende jeder Zeile.
Ersetzen durch: hier Hochkomma und Komma eingeben.
Suchmodus: hier muss Reguläre Ausdrücke aktiviert sein.
Abschließend auf Alle ersetzen klicken.
Alle Zeilen sehen nun wie folgt aus:
Alt:
# Version 2018022200, Last Updated Thu Feb 22 07:07:01 2018 UTC AAA AARP ABARTH ABB : ZM ZONE ZUERICH ZW
Neue:
'AAA', 'AARP', 'ABARTH', 'ABB', : 'ZM', 'ZONE', 'ZUERICH', 'ZW',
Diese präparierte Liste kann nun in die bestehende Datei Hostname.php eingepflegt werden. Wie das geht, steht weiter oben.
Ab sofort können Kunden auch mit noch so fancy Mail-Adressen im Magento Shop einkaufen.
Unbeschwertes Shoppen wünscht,
Chefkoch
Als Chefkoch arbeite ich als Systemadministrator und Programmierer. Hier blogge ich über Joomla, Magento, WordPress und Windows. In meiner Freizeit fotografiere ich viel, fahre mit meiner Yamaha XT660R oder Jogge durch die Gegend.
Super Erklärung!
Hat mir viel Zeit gespart.
Noch eine kleine Ergänzung:
Die TLDs müssen noch in Kleinbuchstaben konvertiert werden. Geht mit Notepad++: CTRL+U
Viele Grüße