Leitfaden: PDF Dokumente in Shopware Anpassen - Konkretes Beispiel: Lieferadresse auf der Rechnung

Leitfaden: PDF Dokumente in Shopware Anpassen - Konkretes Beispiel: Lieferadresse auf der Rechnung

Alexander Wolf 24. Februar 2018 19

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)

Vorbereitung

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:

shopware standard rechnung pdf

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.

Eigenes Theme erstellen

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. 

Block erweitern

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:

Screenshot 2018 02 24 07.17.41

Troubleshooting: Änderungen werden nicht übernommen

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!

Lieferadresse anzeigen

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:

Screenshot 2018 02 24 07.55.54

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.

Der große Test

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.

abweichende lieferadresse

Bei mir hat alles super funktioniert und ich bin zufrieden! Und jetzt lasse ich mir die bestellte Zartbitter Schokolade schmecken.

zartbitter

Abschluss

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.

19 Kommentare

  • Hallo Ihr lieben,
    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
  • Danke für die Anleitung. Es klappt alles gut, ich habe das ergänzt, damit die Lieferadresse nur ausgegeben wird wenn sie von der Rechnungsadresse abweicht.

    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
  • Hi liebe 8mylez Entwickler, ich beiße mir gerade die Zähne an den PDF Belegen aus, weil ich gerne die selber vergebene Kundennummer in den Belegen ausgeben möchte. Werden die Kundennummern nicht von SW vergeben steht da nämlich immer Kundennummer: 00000 - nicht schön! Eigenlich müsste ja an dieser Stelle das hier stehen - Kundennummer: {$additional.user.customernumber}, ich finde es nur nicht ... ;-) Danke und LG Michael
  • Hey Michael,

    wie hast du die selbst vergebene Kundennummer eingerichtet? Über ein Freitextfeld bei den Benutzern?

    Gruß
    Alexander
  • Hallo Alexander, noch gar nicht, weil mir der Ansatz fehlt. In den Mailvorlagen habe ich einfach, Kundennummer: {$additional.user.customernumber} hinzugefügt, dann wird die Kundennummer mit übergeben. Das wird sicher bei der PDF Belegerstellung nicht so einfach gehen, denke ich mir ... ;-) Eventl. gibt es da eine andere Vorgehensweise? LG Michael
  • In den bereich "Lieferadresse anzeigen" ist das beispiel Code komplett weg??

    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!
  • Hey Mark,

    der Code ist wieder da! Viel Erfolg beim Einbinden :)

    Gruß
    Alexander
  • Hallo Alexander,
    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.
  • Hey Christian,

    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
  • Hallo,
    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?
  • Hey shimda,

    der Code in dem Blogpost zeigt die Lieferadresse immer an, unabhaengig davon ob diese von der Rechnungsadresse abweicht oder nicht.

    Gruß
    Alexander
  • Hallo,
    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}
  • Hey Matthias,

    vielen Dank! Ich habe es korrigiert :)

    Gruß
    Alexander
  • Jetzt habe ich ziemlich viel Zeit damit verbraten, herauszufinden, was nicht stimmt, weil es bei mir nicht funktionierte:

    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}



  • Hey Manfred,

    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
  • Hi Alexander
    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.
  • Hey Chrigi,

    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
  • Besten Dank
    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
  • Hey Chrigi,

    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?

Beliebt

Was du über die Shopware 5 Theme Struktur wissen musst und wie du ein eigenes Template erstellst
Social Media Icon mit Link im Footer
Shopware Theme: Eigenes Listing Layout erstellen
Logo Größe mit Less für Shopware 5 anpassen
Die größten Fehler bei der Entwicklung eines Shopware 5 Themes

Sicher Dir die besten Shopware 6
Tipps & Tricks

Trag Dich ein und Du erhältst unser Shopware 6 Whitepaper kostenlos!
Trag dich für unseren Newsletter an, im Anschluss erhältst Du das Whitepaper. 

Mit dem Abschicken Deiner Daten akzeptierst Du unsere Datenschutzerklärung.

Entdecke unsere ebooks

Unsere Standorte

Zentrale 

Technologiepark 23
33100 Paderborn


Leipzig
Bernhardstraße 34
04315 Leipzig

Kontakt

Ü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


Unsere Partner
© 2023 by 8mylez GmbH //  Impressum + Datenschutz