DHL-Intraship: verbesserte Aufteilung von Straße und Hausnummer

In meinem Erfahrungsbericht zu DHL Intraship habe ich von einigen Problemen berichtet. In der seit kurzem erhältlichen Version 0.3.4 soll der Versand an eine Packstation sowie in das europäische Ausland funktionieren.

Die Trennung der Straße von Hausnummer wurde nach wie vor nicht gelöst: Gibt der Kunde die Hausnummer hinter der Straße ohne Leerzeichen ein (z.B. Musterstr.12), ist bei Erstellung von Versandetiketten manueller Eingriff erforderlich.

Der Entwickler von Intraship hat mich darauf hingewiesen, dass die Straße von der Hausnummer in der Funktion splitStreet aufgeteilt wird. Diese Funktion ist in der folgenden Datei definiert:

 \app\code\community\Dhl\Intraship\Helper\Data.php

Mein Verbesserungsvorschlag, die Aufteilung mit einem regulären Ausdrück vorzunehmen, wird im kommenden Release modifiziert eingebaut sein.

Die Verbesserung kann schon jetzt eingesetzt werden. In Data.php ist die erste Zeile in der Funktion splitStreet zu ersetzen

$parts = array_reverse(explode(' ', $street));

durch

preg_match("/^([^0-9]+)[ \t]*([-\w^.]+)[, \t]*([^0-9]+.*)?\$/", $street, $matches);
unset($matches[0]); // Erstes Element entfernen
$parts = array_reverse($matches);

Erstes Element wird deshalb entfernt, weil er die gesamte Zeichenkette enthält, auf die der reguläre Ausdruck passt.

Tipp: Hilfreiche Werkzeuge bei der Arbeit mit regulären Ausdrücken.

Die neue Funktion sieht wie folgt aus:

 function splitStreet_mod($street)
    {
       preg_match("/^([^0-9]+)[ \t]*([-\w^.]+)[, \t]*([^0-9]+.*)?\$/", $street, $matches);
       unset($matches[0]); // Erstes Element entfernen
       $parts = array_reverse($matches);

    // alte Aufteilung auskommentiert:
    // $parts = array_reverse(explode(' ', $street));

        $current = 'care_of';
        $splittedStreet = array(
            'street_name'   => '',
            'street_number' => '',
            'care_of'       => ''
        );
        foreach ($parts as $value) {
            if ('care_of' == $current) {
                if (is_numeric(substr($value, 0, 1))) {
                    $current = 'street_number';
                }
            }
            if ('street_number' == $current && false === is_numeric(substr($value, 0, 1))) {
                $current = 'street_name';
            }
            $splittedStreet[$current] = trim($value . ' ' . $splittedStreet[$current]);
        }
        return $splittedStreet;
    }

Tipp: die etwas versteckte Supportseite von DHL Intraship bietet eine Dokumentation und einen Download der Erweiterung direkt beim Entwickler.

2 Gedanken zu „DHL-Intraship: verbesserte Aufteilung von Straße und Hausnummer“

  1. soeben wurde die Version 0.3.5 auf MagentoConnect released.

    Eine aktualisierte Dokumentation und das Changelog finden Sie auf:
    http://www.netresearch.de/magento/dhl.html

    Bugfixes:
    – Doppelte Sendungserstellung durch Cronjob und manuelle Übertragung
    – Link zur Sendungsverfolgung im Ausland fehlerhaft
    – Filter für gedruckte Dokumente funktioniert nicht in CE 1.6

    Features:
    – Fehlerhafte Sendungen bei der Adressbearbeitung speichern und wiederaufnehmen
    – Verbesserte Straßen- und Hausnummerauftrennung

    Netreseach Support Team

Schreibe einen Kommentar zu pwl Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.