In diesem Blogpost zeige ich Dir wie Du die Lieferadresse auf der generierten Rechnung von Shopware anzeigen lassen kannst.
Auf der PDF Rechnung die von Shopware generiert wird, steht die Rechnungsadresse. Falls es eine abweichende Lieferadresse gab, sucht man diese vergeblich.
Zumindest im Standard PDF Template!
Genau diese Anpassung wollen wir in diesem Tutorial durchführen. Ich möchte Dir in diesem Blogbeitrag zeigen wie Du die Lieferadresse auf Deine Rechnung bekommst. Nicht nur das! Ich werde Dir damit auch zeigen wie Du die Dokumente in Shopware über Dein eigenes Theme anpassen kannst.
Dabei kannst Du völlig kreativ alles austauschen oder anpassen. Fangen wir an!
(Lesedauer ~ 4 Minuten)
Es kann wirklich hilfreich sein die Lieferadresse auf der Rechnung anzeigen zu lassen. So kannst Du die Bestellung im Nachhinein einfacher zurückverfolgen und Du siehst auf den ersten Blick wo die Ware geliefert wurde.
Ich habe eine Bestellung durchgeführt und mir eine Rechnung über das Shopware Backend generieren lassen:
Oben links finden wir die Rechnungsadresse. Unter diesen Block wollen wir die Lieferadresse anzeigen lassen, jedoch nur dann, und nur dann, wenn sich diese abweicht.
Da wir diese Anpassungen über ein eigenes Theme erledigen wollen, benötigst Du erst einmal ein eigenes Theme. Wie das funktioniert erfährst, Du entweder in unserem Video Wie Du Dein erstes Shopware 5 Theme anlegst und anpasst – Teil 1 oder unserem Blogbeitrag was Du über die Shopware 5 Theme Struktur wissen musst und wie Du ein eigenes Template erstellst
Das arbeitest Du jetzt durch und kommst dann wieder her. Solltest Du schon ein eigenes Theme haben, kannst Du direkt weiterlesen.
In diesem Beispiel möchte ich die PDF für die Rechnungen anpassen. Daher navigieren wir in unserem FTP Client in den Ordner
/themes/Frontend/Bare/documents
Wir navigieren zuerst zum Bare Theme, um uns den Aufbau des Themes anzuschauen, bevor wir anfangen Blöcke anzupassen oder zu erweitern. In der index.tpl finden wir alles, was wir brauchen.
Die Zeilen 91 - 124 sind dabei am interessantesten für uns.
So wird die Rechnungsadresse angezeigt. Um jetzt an die Lieferadresse zu kommen, müssen wir zunächst eine eigene Datei anlegen. Dazu begibst Du Dich in den Ordner
/themes/Frontend/DEINTHEME/documents
Hier legst Du Deine eigene index.tpl an und gibst erbst von der Original Datei:
Wichtig ist, dass Du wirklich auf den Pfad achtest: parent:documents/index.tpl
Bisher wirst Du keinen Unterschied bemerken, da wir alles vom Original Theme erben, d. h. wir haben noch keine Anpassungen gemacht. Aber wenn Du jetzt den ersten Smarty Block überschreibst, sollte sich etwas tun.
Als Erstes erweitere ich den Block mit der Rechnungsadresse, sodass ich einen beliebigen Text an die richtige Position bekomme. Danach ersetzen wir diesen beliebigen Text mit der Versandadresse. Um den Rechnungsblock zu erweitern, ergänzen wir den Code in der index.tpl
Im Backend müssen wir den Cache leeren und das Theme kompilieren. Danach kannst Du Dir die Vorschau anzeigen lassen. Die Vorschau findest Du unter
Einstellungen > Grundeinstellungen > Shopeinstellungen > PDF - Belegerstellung
Da einfach auf das Bearbeiten Icon klicken und auf den Vorschaubutton.
Jetzt solltest Du wie ich den neuen Text sehen:
Hinweis: Sollte das nicht funktioniert haben, musst Du als Erstes die Shopeinstellungen prüfen. Jeder Shop kann verschiedene Templates verwenden. Diese Einstellung findest Du im Backend unter
Einstellungen > Grundeinstellungen > Shopeinstellungen > Shops
Dann auf das Bearbeiten Icon Deines Shops und rechts in der Sidebar das Dokumenten-Template DEINTHEME auswählen (bei Dir heißt das Theme vermutlich anders).
Speichern, nochmal Cache leeren, Theme kompilieren und die Vorschau öffnen. Jetzt solltest Du den neuen beliebigen Text auch sehen!
Da der Text jetzt angezeigt wird, ist es an der Zeit den beliebigen Text mit der korrekten Lieferadresse zu ersetzen. Dazu packst Du den folgenden Code in die index.tpl. Wir gehen diesen gleich Zeile für Zeile durch und besprechen alles im Detail.
Speichern, Datei hochladen, Cache leeren, Theme kompilieren und wieder in die Vorschau gucken.
Das Ergebnis sieht so aus:
Bevor wir das Ganze mit einer richtigen Testbestellung testen, schauen wir uns den Code an.
In Zeile 6 erstellen wir eine neue Variable mit dem Namen shippingAddress, welche den Inhalt von shipping bekommt. Da stecken die ganzen Informationen zur Versandadresse drin.
Zeile 8 ist wichtig, da die Lieferadresse sonst direkt an der Rechnungsadresse klebt. So fügen wir eine leere Zeile für etwas Abstand hinzu.
Die Zeilen 9 - 30 sind von der Rechnungsadresse kopiert, da habe ich lediglich die Variable ausgetauscht, damit die Lieferadresse verwendet wird.
Fertig! Jetzt kommt der erste Test mit einer richtigen Testbestellung. Natürlich musst Du am besten eine abweichende Lieferadresse verwenden, damit Du auch sehen kannst, dass die Lieferadresse verwendet wurde.
Ich gönne mir Zartbitter mit Birne und Mandeln und trage eine abweichende Lieferadresse ein. AGB akzeptieren nicht vergessen und Bestellung abschicken.
Im Backend unter Kunden > Bestellungen findest Du jetzt die neue Bestellung. In den Details der Bestellung unter Dokumente kannst Du die Rechnung generieren und herunterladen.
Bei mir hat alles super funktioniert und ich bin zufrieden! Und jetzt lasse ich mir die bestellte Zartbitter Schokolade schmecken.
In diesem Beitrag habe ich bisher nur eine Möglichkeit beschrieben. Du kannst die abweichende Adresse auch nur anzeigen lassen, wenn diese tatsächlich abweicht. Dazu habe ich Dir ein paar interessante Links zusammengestellt mit denen Du Dein Dokument weiter optimieren kannst.
Die anderen Dokumente sind entsprechend gleich aufgebaut, da diese von der index.tpl erben und somit entsprechend alle denselben Dokumenten Kopf besitzen.
Unsere Standorte
Zentrale
Technologiepark 23
33100 Paderborn
Leipzig
Bernhardstraße 34
04315 Leipzig
Kontakt
E-Mail: support@8mylez.com
Telefon: +49 (0) 5251 284 710
Shopware Dienstleistungen
Über 8mylez
✓ 38 Mitarbeiter
✓ Shopware Gold Partner
✓ 40.000+ Plugin Downloads
✓ 160+ betreute Shops
✓ Full-Service Shopware Agentur
✓ 70 Shopware Videos auf Youtube
✓ Alle Shopware Zertifizierungen
Social
Meg
ich verzweifel regelrecht, eventuell könnt ihr mir helfen. Gibt es eine Möglichkeit bei der PDF-Rechnung auf der Zweiten Seite mehr Artikel ausgeben zu lassen als auf der ersten?
Liebe Grüße
Meg
Dieter Haskamp
Nun wollte ich gerne über der Lieferanschrift den Text "Lieferanschrift:" ausgeben, der Text erscheint aber gar nicht. Wie muss die Syntax für einen solchen Text lauten?
Grüße Dieter
Michael
Alexander Wolf
wie hast du die selbst vergebene Kundennummer eingerichtet? Über ein Freitextfeld bei den Benutzern?
Gruß
Alexander
Michael
Mark
Ich versuch das jetzt seit Stunden aber ich kriege das irgendwie nicht hin?
Könne Sie bitte das richtige Code wieder einfügen?
Vielen Dank!
Alexander Wolf
der Code ist wieder da! Viel Erfolg beim Einbinden :)
Gruß
Alexander
Christian Geschwandtner
vielen Dank für die Einführung und es hat wunderbar Funktioniert.
Jedoch sieht es sehr blöd aus und daher meine Frage ob man dies nicht noch etwas gestalten kann wie z.B so:
Normale Anschrift (links) | Lieferanschrift (Rechts)
So dies Optisch.
Alexander Wolf
das ist eine coole Idee und ohne Probleme möglich. Du musst den passenden CSS Code in die Templates mit einfügen. In den originalen Dateien von Shopware siehst du wie es im Core Code ausschaut.
Gruß
Alexander
shimda
gibt es überhaupt einen Code, dass immer eine Lieferadresse angegeben wird? Mein Code, den ich im Forum von Shopware gefunden habe, wirft nur eine Adresse aus, wenn sie abweicht.
Gibt es auch eine Lösung, dass die abweichende Adresse oder die von der Rechnung ausgegeben wird und nicht nur eines von beiden?
Alexander Wolf
der Code in dem Blogpost zeigt die Lieferadresse immer an, unabhaengig davon ob diese von der Rechnungsadresse abweicht oder nicht.
Gruß
Alexander
Matthias
wäre einfach schön, wenn oben im Beispiel der Fehler auch korrigiert wird.
also im Code:
{extends file="parent:documents/index.tpl"}
{block name="document_index_address"}
{$smarty.parent.block}
Lieferadresse hier rein
{/block}
{$smarty.block.parent} statt {$smarty.parent.block}
Alexander Wolf
vielen Dank! Ich habe es korrigiert :)
Gruß
Alexander
Manfred Bolz
1. Fehler:
"Wichtig ist, dass du wirklich auf den Pfad achtest: parent:document/index.tpl"
Das stimmt definitiv (wichtig ist, dass du auf den Pfad achtest). Nur dass der Pad richtig documents heißt und nicht document
Wichtig ist also, dass du wirklich auf den Pfad achtest: parent:documents/index.tpl
2. Fehler:
{block name="document_index_address"}
{$smarty.parent.block}
Lieferadresse hier rein
{/block}
führt zum Syntax-Fehler.
{block name="document_index_address"}
{$smarty.block.parent}
Alexander Wolf
ohje! Das ist natürlich doof. Ich korrigiere es direkt bei mir. Glücklicherweise steht es in den Code Schnipseln richtig.
Vielen Dank für das finden des Bugs!
Bei dem zweiten Fehler verstehe ich nicht ganz was du meinst. Ich glaube der Kommentar ist auch nicht ganz zu Ende geschrieben oder?
Gruß
Alexander
Chrigi
Danke für Deine Antwort. Nei funzt so nicht. Im Moment habe ich mit meiner Config.
Bei abweichender Rechnung/Lieferadresse nur eine Adresse auf Lieferschein und die andere auf der Rechnung. Macht doch so auch mehr sinn? Lieferschein =Lieferadresse und Rechnung=Rechnungsadresse. Bei dieser konfiguration sind immer beide drauf? Und auch das mit dem Herr/ Frau auf der ersten Linie geht so nicht. Sehe da nicht durch wirklich.
Alexander Wolf
das kann durchaus Sinn machen! Ich denke das entscheidet am besten jeder Shopbetreiber fuer seinen Shop individuell.
Vielleicht kannst du mir deinen Code an support@8mylez.com schicken, sodass ich einen Eindruck bekomme was falsch gelaufen sein koennte.
Gruß
Alexander
Wetter
Geniale Anleitung.
Genau das sollte ich noch erledigen. ich habe eine kleine Änderung gemacht im Index.tpl nur das die Anrede auf eine Neue Zeile kommt. Original ist es ja Herr Muster und ich wollte:
Herr
Muster Andreas.
Nur leider nicht Updatesicher das ganze. Kann ich nicht die ganze Index.tpl vom bare Theme in mein Eigenes kopieren.
Natürlich denn Text davor:
{extends file="parent:documents/index.tpl"} Dann übernimmt er ja alles oder?
Sonst müsste ich die Anrede auch noch irgendwie einpacken in Deinen Code.
Danke vielmals für Deine Anleitungen
Gruss Chrigi
Alexander Wolf
vielen Dank!
Ich wuerde davon abraten den ganzen Code zu kopieren, da du dann Code mit gleichem Code überschreibst. So bekommst du auch evtl. Änderungen bei einem Update nicht mit, da alles überschrieben wird von dir.
Lieber in der ersten Zeile ableiten und dann nur den entsprechenden Block überschreiben. Für dein Vorhaben müsste es reichen den Block "document_index_address_base" zu überschreiben und da dann entsprechend den Zeilenumbruch einzufügen.
Ungefähr so:
{block name="document_index_address_base"}
{$User.$address.company}
{$User.$address.salutation|salutation}
{if {config name="displayprofiletitle"}}
{$User.$address.title}
{/if}
{$User.$address.firstname} {$User.$address.lastname}
{$User.$address.street}
{/block}
Ich habe es nicht getestet, aber sollte funktionieren. Falls nicht, meld dich gerne nochmal!
Gruß
Alexander
Was denkst du?