Ausgabe von Kunden-Adressdaten optimieren



Wem stören auf dem zweiten Blick der Adressdaten nicht die standardmäßige Darstellung der Kunden-Adressdaten (Rechnungs- und Lieferanschrift), insbesondere im Checkout und den E-Mails, etwa nach einer Bestellung?

Der Grund für diese Formatierung ist sehr einfach. Magento ist eine Applikation, die in erster Linie für den US-Amerikanischen Markt konzipiert ist und somit auch mit dem US-Adressformat arbeitet.

Insbesondere die Reihenfolge von Postleitzahl und Stadt / Ort sind vielen Anwendern und Shopbetreibern ein Dorn im Auge.

kunden-adressen-checkout-alt

Daher wird im folgenden Tutorial ein kleines Mini-Modul (3 Dateien) erstellt, dass diese Kriterien erfüllen soll:
- Anstelle der Werksseitigen Komma werden Bindestriche & Zeilenumbrüche verwendet.
- Die Reihenfolge der Daten wird insbesondere für die oben genannten Stellen abgeändert (Postleizahl & Stadt)
- Vorbereitung auf den Zustand “keine Angabe von Bundesland” (späteres Tutorial)
- Die herbeigeführten Veränderungen soll man in der Fortschrittsanzeige (Checkout), der einzeiligen Angabe im Checkout (wenn der Kunde eingeloggt ist) & allen E-Mails + PDFs sehen können.

Vorbereitung / Orientierung:
Die Original-Dateien befinden sich unter
- app/code/core/Mage/Customer/etc/config.xml und unter
- app/code/core/Mage/Customer/Model/Address/Config.php

Falls dies Ihr erstes Tutorial ist, so legen Sie bitte zunächst unter app/code/local ein Ordner mit dem Namen “Mxperts” an.

verzeichnisse-kundenadresse

 

Legen Sie nun bitte unterhalb des Ordners “Mxperts” die Verzeichnishierarchie wie auf der Grafik an.

Erstellung der Dateien
Erstellen & speichern Sie bitte die Datei app/etc/modules/Mxperts_CustomerAddress.xml mit diesem Inhalt:

<?xml version="1.0"?>
<config>
    <modules>
        <Mxperts_CustomerAddress>
            <active>true</active>
            <codePool>local</codePool>
        </Mxperts_CustomerAddress>
    </modules>
</config>

Danach benötigen wir noch unter app/code/local/Mxperts/CustomerAddress/etc die Datei config.xml:

<?xml version="1.0"?>
<config>
    <global>
        <models>
            <customer>
                <rewrite>
                    <address_config>Mxperts_CustomerAddress_Model_Address_Config</address_config>
                </rewrite>
	    </customer>
        </models>
<!-- Ausgabe der verschiedenen Adress-Formatierungen: Text, Text One Line (registrierte Nutzer),
HTML (Fortschritt - Checkout), PDF & den E-Mail Templates -->
		<customer>
            <address>
                <formats>
                    <text translate="title" module="customer">
                        <title>Text</title>
                        <defaultFormat><![CDATA[
{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}
{{depend company}}{{var company}}{{/depend}}
{{var street1}}
{{depend street2}}{{var street2}}{{/depend}}
{{depend street3}}{{var street3}}{{/depend}}
{{depend street4}}{{var street4}}{{/depend}}
{{var postcode}} - {{depend city}}{{var city}},  {{/depend}}{{depend region}}{{var region}}, {{/depend}}
{{var country}}
Tel: {{var telephone}}
{{depend fax}}Fax: {{var fax}}{{/depend}}
                        ]]></defaultFormat>
                    </text>
                    <oneline translate="title" module="customer">
                        <title>Text One Line</title>
                        <htmlEscape>true</htmlEscape>
                        <defaultFormat>
<![CDATA[{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}} - {{var street}} - {{var postcode}} - {{var city}} {{depend region}}- {{var region}}{{/depend}} - {{var country}}]]>
                        </defaultFormat>
                    </oneline>
                    <html translate="title" module="customer">
                        <title>HTML</title>
                        <htmlEscape>true</htmlEscape>
                        <defaultFormat><![CDATA[
{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}<br />
{{depend company}}{{var company}}<br />{{/depend}}
{{var street1}}<br />
{{depend street2}}{{var street2}}<br />{{/depend}}
{{depend street3}}{{var street3}}<br />{{/depend}}
{{depend street4}}{{var street4}}<br />{{/depend}}
{{var postcode}} - {{depend city}}{{var city}}<br /> {{/depend}}
{{depend region}}{{var region}}<br /> {{/depend}}
{{var country}}<br/>
{{depend telephone}}Tel: {{var telephone}}{{/depend}}
{{depend fax}}<br/>Fax: {{var fax}}{{/depend}}
            ]]></defaultFormat>
                    </html>
                    <pdf translate="title" module="customer">
                        <title>PDF</title>
                        <defaultFormat><![CDATA[
{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}|
{{depend company}}{{var company}}|{{/depend}}
{{var street1}}|
{{depend street2}}{{var street2}}|{{/depend}}
{{depend street3}}{{var street3}}|{{/depend}}
{{depend street4}}{{var street4}}|{{/depend}}
{{var postcode}} - {{depend city}}{{var city}}|{{/depend}}
{{depend region}}{{var region}} - {{/depend}}|
{{var country}}|
{{depend telephone}}Tel: {{var telephone}}{{/depend}}|
{{depend fax}}<br/>Fax: {{var fax}}{{/depend}}|
            ]]></defaultFormat>
                    </pdf>
                    <js_template template="title" module="customer">
                        <title>Javascript Template</title>
                        <defaultFormat><![CDATA[#{prefix} #{firstname} #{middlename} #{lastname} #{suffix}<br />#{company}<br />#{street0}<br />#{street1}<br />#{street2}<br />#{street3}<br />#{postcode}, #{city}, #{region}, <br />#{country_id}<br/>Tel: #{telephone}<br />Fax: #{fax}]]></defaultFormat>
                    </js_template>
                </formats>
            </address>
        </customer>
	</global>
</config>

Diese Datei hat die Aufgabe, die Reihenfolge & Formatierung der Adressdaten zu definieren & ist somit für dieses kleine Modul der funktionelle Kern.

Als letzten Step erstellen & speichern wir noch die Datei app/code/local/Mxperts/CustomerAddress/Model/Address/Config.php

In dieser Datei wird folgender Inhalt hinterlegt:

<?php
class Mxperts_CustomerAddress_Model_Address_Config extends Mage_Customer_Model_Address_Config
{

    protected function _getDefaultFormat()
    {
        if(is_null($this->_defaultType)) {
            $this->_defaultType = new Varien_Object();
            $this->_defaultType->setCode('default')
                ->setDefaultFormat('{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}} <br /> {{var street}} <br /> {{var postcode}} - {{var city}} <br /> {{var region}} <br /> {{var country}}');

            $this->_defaultType->setRenderer(
                Mage::helper('customer/address')
                    ->getRenderer(self::DEFAULT_ADDRESS_RENDERER)->setType($this->_defaultType)
            );
        }
        return $this->_defaultType;
    }

}

Nach aktualisieren aller Caches sollte die Darstellung der Kunden-Addressdaten in Ihrem Magento-Shop nun so aussehen:
kunden-adressen-checkout-neu

Tipps / Ergänzende Informationen
Es ist in der config.xml im Ordner etc auch möglich, weitere Daten mit aufzunehmen - fügen Sie die gewünschten Felder einfach an den betreffenden Stellen mit ein. Zum Beispiel die E-Mail Adresse auch im Bestellfortschritt mit anzeigen, dann fügen Sie in dem Bereich “HTML” diese mit ein. Der Code sollte an dieser Stelle dann wie folgt aussehen:

{{depend telephone}}Tel: {{var telephone}}{{/depend}}
{{depend fax}}<br />Fax: {{var fax}}{{/depend}}
{{depend email}}<br />E-Mail: {{var email}}{{/depend}}

Dieses “depend” steht hier für “wenn angegeben oder vorhanden”.

Genau in diesem Stil wurde innerhalb dieser Datei ermöglicht, dass komplett abweichend vom Standard die Ausgabe vom Bundesland formatiert würde. Tut man das nicht, hat man später das Problem (wenn kein Bundesland verwendet werden soll), doppelte Trennzeichen mit ausgegeben werden. Hier der Beispielcode für Bundesland aus dem Bereich “HTML”:

{{depend region}}{{var region}}<br /> {{/depend}}

Für eigene Anpassungen sollte man sich die Fragen stellen “Welche Daten möchte ich anzeigen / übermitteln ?” & “Brauche ich allen Daten überall ?”.

Es ist ja zum Beispiel möglich das man die E-Mail Adresse in der Bestellbestätigung zwecks Rücksprache mit dem Kunden anzeigen möchte, in der Fortschrittsanzeige im Store-Frontend aber nicht. Lassen Sie Ihrer Kreativität freien Lauf & entscheiden Sie selbst darüber wie Sie die Möglichkeiten der Formatierung von Kunden-Adressdaten für Ihr Geschäftsmodell am besten nutzen können.

Liebe Grüße - Daniel Sasse

Download aller Dateien: tutorial-kunden-adressdaten.zip

Ab sofort steht dieses kleine Modul auch auf Magento-Connect zum Download bereit!
http://www.magentocommerce.com/extension/1603/mxperts–customeraddress

  • Twitter
  • Webnews
  • Mister-Wong
  • Facebook
  • Digg
  • BlogMarks
  • Share/Save/Bookmark

20 Kommentare to “Ausgabe von Kunden-Adressdaten optimieren”

  1. Alexander Fuchs Alexander Fuchs sagt:

    Sehr schönes Tutorial, aber aus irgendeinen Grund will das bei mir nicht gehen. Habe erstmal Anhang von deinen Tutorial alles in mein Modul portiert, nachdem das nicht ging, habe ich die Dateien einfach runtergeladen und bei mir eingesetzt. Das will auch nicht gehen.

    Kann es sein das in der config.xml bei den das nicht sondern heissen muss?

  2. Alexander Fuchs Alexander Fuchs sagt:

    hmm mein code wurde gekillt :-)

    bei soll das nicht heissen?

  3.  ds_1984 sagt:

    Wie jetzt, läuft es bei dir oder nicht?

    “bei soll das nicht heissen?” Was ist damit gemeint? Schreibfehler oder so ???

    LG - Daniel

  4. Alexander Fuchs Alexander Fuchs sagt:

    Nein, da wollte ich auszüge aus der XML Datei posten. Die wurden als TAGs erkannt und gekillt :-)

    original:
    (customer)
    (rewrite) (addressconfig)Mxperts_CustomerAddress_Model_Address_Config(/addressconfig)
    (/rewrite)
    (/customer)

    sollte das nicht so heissen:
    (customer)
    (rewrite) (address_config)Mxperts_CustomerAddress_Model_Address_Config(/address_config)
    (/rewrite)
    (/customer)

  5.  ds_1984 sagt:

    Läuft es denn mit der anderen Schreibweise bei dir? Ich frage nur, da ich nach wie vor keinerlei Probleme habe und es wunderbar funktioniert in dieser Schreibweise.

    Ich verwende ja selber das Original das hier gepostet wurde.

    Wenn du möchtest, kann ich ja trotzdem diese “Pseudoschreibweise” die keine wirkliche Funktion hat abändern.

    Ich habe vorhin über das Magento-Forum eine Mail bekommen wo sich einer sehr herzlich bedankt hat & meinte das alles wunderbar geklappt hat.

    Evtl. mal alle Caches aktualisieren & auf jeden Fall zwischen Alt & Neu mal ausloggen, wegen der alten Sitzungsdaten.

    LG - Daniel

  6. Stephan Stephan sagt:

    Wenn ihr die Config nicht überschreiben wollt gibt es noch ne schönere Variante, die auch in Multi-Land-Shops funktioniert

    Es gibt eine Tabelle namens directory_country_format in der die Länderspezifischen Adressformate abgelegt werden können. Der ändert z.B. das HTML-Format für Deutschland

    INSERT INTO `directory_country_format` (`country_format_id`, `country_id`, `type`, `format`) VALUES
    (1, ‘de’, ‘html’, ‘{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}
    \r\n{{depend company}}{{var company}}
    \r\n{{/depend}} {{var street1}}
    \r\n{{depend street2}}{{var street2}}
    \r\n{{/depend}}{{depend street3}}{{var street3}}
    \r\n{{/depend}}{{depend street4}}{{var street4}}
    \r\n{{/depend}}{{var postcode}} {{depend city}}{{var city}}
    \r\n{{/depend}}{{var country}}{{depend telephone}}
    \r\nTelefon: {{var telephone}}{{/depend}} {{depend fax}}
    \r\nFax: {{var fax}}{{/depend}}’),
    (2, ‘de’, ‘pdf’, ‘{{depend prefix}}{{var prefix}}{{/depend}}\r\n{{var firstname}} \r\n{{depend middlename}}{{var middlename}}{{/depend}}\r\n{{var lastname}}\r\n{{depend suffix}}{{var suffix}}{{/depend}}\r\n|\r\n{{depend company}}{{var company}}|{{/depend}} \r\n{{var street1}}\r\n|\r\n{{depend street2}}{{var street2}}|{{/depend}}\r\n{{depend street3}}{{var street3}}|{{/depend}}\r\n{{depend street4}}{{var street4}}|{{/depend}}\r\n{{var postcode}} {{depend city}}{{var city}}{{/depend}}\r\n|\r\n{{var country}}\r\n{{depend telephone}}|Telefon: {{var telephone}}{{/depend}}\r\n{{depend fax}}|Fax: {{var fax}}{{/depend}}’);

  7.  ds_1984 sagt:

    Aja, vielen Dank für den Tipp !!! :-)

    So ist das im Web - es gibt niemals eine Musterlösung sondern viele Wege führen nach Rom. Ich sehe aber oben im Code das die PDF-Ausgabe auch schon mit drin ist, kann das sein?

    Wenn man das in Form einer SQL-Abfrage anbieten könnte wäre es sicher eine Klasse Sache meiner Meinung nach!

    Nochmals danke für den guten Tipp - ich werde mich in Kürze damit mal etwas genauer auseinandersetzen. :-)

    Liebe Grüße - Daniel

  8. albossum albossum sagt:

    Hallo,

    wieder mal ein super Tutorial!!! Vielen Dank dafür!

    Ein kleiner Hinweis bezüglich des Schritts “Legen Sie nun bitte unterhalb des Ordners “Mxperts” die Verzeichnishierarchie wie auf der Grafik an.” -> im Zip-File fehlt das Verzeichnis “CustomerAddress”

  9.  ds_1984 sagt:

    @albossum: Freut mich sehr, dass dir das Tutorial gefällt.
    Insbesondere vielen Dank für den wertvollen Hinweis - von solchen engagierten Usern lebt dieses Blog.

    Die folgenden Veränderungen wurden gerade vorgenommen:
    1. Bereitstellung des veränderten Pakets mit dem oben genannten Ordner “CustomerAddress”.
    2. In der Datei config.xml wurde in der “Rewrite-Anweisung” der Wert von addressconfig zu address_config abgeändert. Sowohl im Tutorial wie auch in dem aktuellen Download-Paket.

    Liebe Grüße - Daniel

  10.  nikl sagt:

    Scheint mit Magento 1.3.2.1 nicht zu funktionieren. Habe die Schritte zunächst selbt ausgeführt, ohne Erfolg. Habe dann die bereitgestellten Daten verwenden, auch keine Änderung. Und auch die Extension auf Magento Connect ändert bei mir leider nichts..

  11.  ds_1984 sagt:

    Dann scheint bei dir aber generell ein Fehler vorzuliegen - bei mir läuft es in 3 Installationen - verschiedene Versionen.
    Sowohl Online wie lokal.

    Aber gut, ich sehe auch zu das generell immer alles hin haut - auch mit Schreibrechten und so.

    Ist echt komisch das keine der 3 varianten bei dir funktioniert. :-(

  12.  nikl sagt:

    [quote]Dann scheint bei dir aber generell ein Fehler vorzuliegen[quote]

    Soetwas hört man natürlich immer gerne :/ Ich werd mir die Sache nochmal genauer ansehen müssen. Seltsamerweise habe ich mit den Anleitungen hier nur dann Probleme, sobald es darum geht ein eigenes Modul zu erstellen. Und ich glaube bei dieser Tatsache sollte ich auch mit der Problemsuche beginnen..

  13.  nikl sagt:

    OK, Cache deaktiviert lassen ist hier also keine Lösung. Nachdem ich den Cache aktiviert und aktualisiert hatte, klappte das dann auch ohne Probleme. Danke für ein wie immer asolut hilfreiches Tutorial!

  14.  marco sagt:

    danke für die tipps!
    wie kann ich den firmen namen im html email einzeln ausgeben?

    mit der email adresse klappt das problemlos
    -> E-Mail: {{var order.getCustomerEMail()}}

  15.  Marko sagt:

    Vielen Dank für diese Erweiterung! Hat jede Menge Verständnis und Erleichterung gebracht …

    Ich möchte in der HTML-Mail nun zusätzlich auch noch die Telefonnummer ausgeben. Sehe ich das richtig, das die aus der config.xml ja nicht übernommen wird?

    Welche Variable muss ich im das Mail-Template aufrufen? Vielen Dank!

  16.  ds_1984 sagt:

    Die HTML-Mail wird in dem Fall als einziges nicht über die config.xml gerändert, sondern über die ebenfalls mitgelieferte Datei “Config.php”.

    Das sieht man daran das sofern angegeben, seit Version 1.0.2 das Feld “Firma” in den E-Mails übermittelt wird.

    Damit das klappt habe ich es in dieser Datei verbaut.

    Ich sehe aber gerade das es wirklich nicht drin ist…also Telefon & Fax.

    Füge in diese Datei ganz hinten nach “country” das hier ein:

    {{depend telephone}} Tel.{{var telephone}}{{/depend}} und speicher sie ab. Vor “depend telephone” am besten noch einen Zeilenumbruch - den stellt er hier in den Kommentaren nicht da!

    Die Formatierung “Tel.” ist optional.

    Generell solltest du bei allen Daten die nur in den E-Mails fehlen zuerst diese Datei prüfen.

    Liebe Grüße
    Daniel

  17.  nother sagt:

    Ich habe einmal ausprobiert, ob die Alternative mit der Übersetzungstabelle in “directory_country_format”. Wenn man das SQL-Statement von Stephan korrigiert (die Hochkommata sind nicht ganz richtig) und einsetzt, dann sind die Adressen tatsächlich anders gestalltet. Allerdings fehlen die Zeilenumbrüche. Hat jemand von euch das auch einmal ausprobiert und weiß evtl. wie man Zeilenumbrüche in den Code bekommt? Bzw. wie sehen denn Zeilenumbrüche aus?

    VG
    Christian

  18.  Michael Lambertz sagt:

    Ich habe das Modul installiert auf Magento 1.3.2 und will jetzt auf 1.4 upgraden. Ist das Modul kompatibel? Hat jemand damit Erfahrungen gemacht?

    Viele Grüße,
    Michael

  19.  ds_1984 sagt:

    Hi Michael, es gibt von der reinen Kompatiblität her in meinen 1.4er Installationen keine Probleme in dem Sinne das etwas nicht, nicht korrekt funktioniert oder gar eine Fehlermeldung kommt.

    ABER: Es sind in der 1.4er einerseits neue Kundenattribute hinzugekommen wie “Gender / Geschlecht” & zum anderen existiert ein kleiner Fehler in der “PDF-Druck” Ansicht (wenn Firma angegeben wird sie doppelt Ausgegeben in der Anschrift).

    Also an sich kannst du die Extension bei einer 1.4er installieren aber trotzdem wird in den nächsten Tagen ein Update erscheinen - ich erwähne das dann mal kurz hier.

    Liebe Grüße - Daniel

  20.  Michael Lambertz sagt:

    Oh super! Vielen herzlichen Dank!

Kommentar erstellen

You must be logged in to post a comment.

Bitte beachten: Mxperts.de ist kein Supportforum sondern eine Informationsplattform, deshalb benutzt für Diskussionen das deutsche Forum von Magento. (Fragen/Kommentare zu den Tutorials ausgeschlossen). Außerdem gebe ich keinen kostenlosen Support zu Magento. Leider haben das einige Leser in letzter Zeit falsch Verstanden und ich bitte um Euer Verständnis. Ich denke diese Plattform ist von unserer Seite aus schon genügend Gratis-Leistung.