Zum Inhalt springen
Shopware 6 Handbuch

Erlebniswelten Transfer: Staging zu Live mit Vorschau und Rollback

Erlebniswelten im Staging bauen, abnehmen lassen und per Klick live stellen: Vorschau mit Konfliktprüfung, Medien ohne Dubletten und Rückroll-Punkt vor jedem Import.

Version 6.7.0 Kompatibel mit 6.7.0 und neuer 43 Min. Lesezeit
Auf dieser Seite

Einleitung

Mit dem Erlebniswelten Transfer baust du Erlebniswelten in deinem Staging-Shop, lässt sie dort abnehmen und übernimmst sie mit wenigen Klicks in deinen Live-Shop. Niemand muss eine Seite im Live-Shop noch einmal Block für Block nachbauen.

Was du mit diesem Plugin erreichst

  • Live geht, was abgenommen wurde. Das Plugin überträgt das komplette Layout mit allen Sektionen, Blöcken, Elementen, Übersetzungen und Bildern.
  • Du siehst vorher, was passiert. Eine Vorschau zeigt je Layout, ob es neu angelegt oder ersetzt wird, was sich ändert und welche Bilder dazukommen.
  • Du verlierst keine Arbeit im Live-Shop. Hat jemand ein Layout seit dem letzten Transfer direkt im Live-Shop geändert, warnt dich das Plugin, bevor es überschrieben wird.
  • Ein Klick zurück. Vor jedem Import sichert das Plugin den bisherigen Stand. Gefällt dir das Ergebnis nicht, rollst du den Transfer zurück.
  • Bilder kommen mit, aber nur einmal. Ist dieselbe Datei im Live-Shop schon vorhanden, verwendet das Plugin sie wieder, statt eine Dublette anzulegen.
  • Zwei Wege, ein Ablauf. Du überträgst per ZIP-Datei oder lässt den Live-Shop die Layouts direkt beim Staging-Shop abholen. Beide Wege enden in derselben Vorschau.

Für wen ist dieses Plugin?

Für Shop-Betreiber, Agenturen und Marketing-Teams, die neue Seiten, Kampagnen und Landingpages in einem Staging-Shop vorbereiten und abnehmen lassen, bevor sie live gehen. Das Plugin ist für das übliche Setup gebaut, bei dem der Staging-Shop eine Kopie des Live-Shops ist.

Gut zu wissen: Das Plugin überträgt Erlebniswelten und Landingpages, keine Produkte, Kategorien oder Theme-Dateien. Es muss im Staging-Shop und im Live-Shop installiert sein.

Installation

Nach dem Kauf steht dir das Plugin direkt in deiner Administration zur Verfügung — du musst nichts herunterladen. Installiere es in beiden Shops: im Staging-Shop und im Live-Shop.

  1. Melde dich in deiner Shopware-Administration an (DeinShop.de/admin)
  2. Öffne Erweiterungen → Meine Erweiterungen
  3. Klicke neben Erlebniswelten Transfer: Staging zu Live mit Vorschau und Rollback auf Installieren
  4. Aktiviere das Plugin über den Schalter neben dem Eintrag — fertig.

Plugin in der Liste „Meine Erweiterungen“, installiert und aktiv Abb. 1: Das Plugin ist installiert und aktiv. Über „Konfigurieren“ gelangst du zu den Einstellungen.

Wiederhole die Schritte im zweiten Shop. Beide Shops sollten dieselbe Plugin-Version haben.

Taucht das Plugin nicht in der Liste auf, ist dein Shopware-Account noch nicht mit dem Shop verbunden. Das erledigst du unter Erweiterungen → Meine Erweiterungen im Reiter Shopware Account über die Anmeldung mit deinem Shopware-Konto.

Erste Schritte

Das Plugin muss wissen, welcher deiner Shops der Live-Shop und welcher der Staging-Shop ist. Das erkennt es an den beiden Adressen, die du einträgst, und vergleicht sie mit der eigenen Adresse des Shops. Daraus ergibt sich die Rolle des Shops:

  • Live (Ziel): Dieser Shop übernimmt Erlebniswelten.
  • Staging (Quelle): Dieser Shop stellt Erlebniswelten bereit.
  • nicht zugeordnet: Es sind keine oder unpassende Adressen eingetragen. Export und Import per Datei funktionieren trotzdem.

So legst du los:

  1. Einstellungen im Live-Shop öffnen: Gehe zu Erweiterungen → Meine Erweiterungen und klicke beim Plugin auf Konfigurieren.

  2. Adressen eintragen: Trage in der Karte Allgemein die Adresse des Live-Systems und die Adresse des Staging-Systems ein und klicke auf Speichern.

  3. Rolle prüfen: Der Hinweis oben in der Karte zeigt jetzt Rolle: Live (Ziel) und die eigene Adresse des Shops.

    Karte „Allgemein“ mit Rollen-Hinweis und den beiden Adressen Abb. 2: Der Live-Shop erkennt seine Rolle an den eingetragenen Adressen.

  4. Verbindung einrichten: Wenn der Live-Shop die Layouts direkt beim Staging-Shop abholen soll, richte die Verbindung mit dem Einrichtungsassistenten ein (siehe So verbindest du Live und Staging). Für den Datei-Weg brauchst du keine Verbindung.

  5. Ersten Transfer starten: Exportiere ein Layout im Staging-Shop (So exportierst du Erlebniswelten im Staging) und übernimm es im Live-Shop (So übernimmst du Erlebniswelten im Live-Shop).

Im Live-Shop findest du alle Funktionen unter Inhalte → Erlebniswelten-Transfer.

Einstellungen

Die Einstellungen findest du unter Erweiterungen → Meine Erweiterungen → beim Plugin auf Konfigurieren. Sie gelten für die ganze Installation, nicht für einzelne Verkaufskanäle. Nimm sie in jedem der beiden Shops vor.

Karte „Allgemein“

Dokumentation öffnen

Die Schaltfläche Dokumentation öffnen ganz oben bringt dich direkt zu dieser Anleitung.

Rollen-Hinweis

Der blaue Kasten darunter zeigt, in welcher Rolle der Shop gerade arbeitet, warum das so ist und welche eigene Adresse er hat. Steht dort System nicht zugeordnet, stimmen die eingetragenen Adressen nicht mit der eigenen Adresse des Shops überein.

Adresse des Live-Systems und Adresse des Staging-Systems

Hier trägst du die Adressen deiner beiden Shops ein, jeweils mit https://. Stimmt eine davon mit der eigenen Adresse des Shops überein, arbeitet er in dieser Rolle. Trage in beiden Shops dieselben zwei Adressen ein.

Das Plugin prüft die Adressen schon während der Eingabe. Unverschlüsselte Adressen (ohne https://) und zwei Adressen, die auf denselben Shop zeigen, werden nicht gespeichert. Du erkennst das am Hinweis Diese Adressen werden nicht gespeichert.

Wozu das gut ist: Durch die Rolle weiß jeder Shop, was er darf. Der Live-Shop übernimmt, der Staging-Shop liefert. Ein versehentlicher Import in den falschen Shop ist so ausgeschlossen.

Karte „Verbindung zum Staging-System“

Diese Karte brauchst du nur, wenn der Live-Shop die Layouts direkt beim Staging-Shop abholen soll. In der Regel füllt der Einrichtungsassistent die Felder für dich aus (siehe So verbindest du Live und Staging).

Karte „Verbindung zum Staging-System“ Abb. 3: Zugangsdaten für die Verbindung zum Staging-Shop

Zugangsschlüssel-ID und Geheimer Zugangsschlüssel

Mit diesen Zugangsdaten meldet sich der Live-Shop beim Staging-Shop an, um Erlebniswelten abzuholen. Sie gehören zur Integration „CMS-Transfer (Staging-Zugriff)“. Der geheime Schlüssel wird nicht erneut angezeigt und nie protokolliert.

Benutzer für Verzeichnisschutz (optional) und Passwort für Verzeichnisschutz (optional)

Nur nötig, wenn dein Staging-Shop zusätzlich mit einem Verzeichnisschutz (Benutzername und Passwort im Browser) gesichert ist. Der Bereich /api/ des Staging-Shops muss vom Verzeichnisschutz ausgenommen sein, sonst klappt der Abruf nicht. Das richtet in der Regel dein Hoster oder deine IT ein.

Zeitüberschreitung in Sekunden

So lange wartet der Live-Shop auf eine Antwort des Staging-Shops, bevor er aufgibt. Möglich sind 5 bis 300 Sekunden, voreingestellt sind 30. Erhöhe den Wert, wenn dein Staging-Shop langsam antwortet und Abrufe deshalb abbrechen.

Verbindung testen, Einrichtungsassistent und Einrichtungscode einfügen

Mit diesen Schaltflächen richtest du die Verbindung ein und prüfst sie. Wie das geht, steht in So verbindest du Live und Staging.

Karte „Quelle (Staging-System)“

Maximale Paketgröße in MB

Diese Einstellung wirkt im Staging-Shop. Sie legt fest, wie groß ein Paket höchstens werden darf, das der Staging-Shop für den Live-Shop schnürt. Voreingestellt sind 1024 MB. Ist eine Anfrage größer, scheitert sie mit einer Meldung. Übertrage dann weniger Layouts auf einmal oder nutze den Datei-Weg.

Karte „Import“

Die Einstellungen dieser Karte wirken im Live-Shop. Die ersten vier sind Vorauswahlen für den Import-Assistenten. Du kannst sie bei jedem Import noch ändern.

Karte „Import“ in der Plugin-Konfiguration Abb. 4: Vorauswahlen für den Import-Assistenten und Aufbewahrungsfristen

Zuweisungen standardmäßig übernehmen

Ist der Schalter an, ordnet der Import die Layouts denselben Kategorien, Produkten, Landingpages und Verkaufskanal-Startseiten zu wie im Staging-Shop. Standardmäßig ist er aus. Schalte ihn ein, wenn du im Staging-Shop auch festlegst, wo ein Layout verwendet wird.

Standard-Layouts standardmäßig übernehmen

Ist der Schalter an, übernimmt der Import die Standard-Layouts für Kategorien und Produkte so, wie sie im Paket stehen. Standardmäßig ist er aus.

Landingpages standardmäßig übernehmen

Ist der Schalter an, legt der Import die Landingpages aus dem Paket an oder aktualisiert sie. Standardmäßig ist er aus.

Übersetzungen, die nur in diesem System existieren

Manchmal hat ein Layout im Live-Shop eine Übersetzung, die im Paket fehlt. Mit Behalten bleibt diese Übersetzung erhalten, du verlierst also nie Inhalte. Mit Entfernen wird sie gelöscht, damit das Layout danach genau dem Paket entspricht. Voreingestellt ist Behalten.

Maximale Paketgröße für Uploads (MB)

Größere Dateien weist der Upload im Live-Shop ab. Voreingestellt sind 1024 MB. Die Datei wird in Stücken zu 5 MB hochgeladen, deshalb spielt die Upload-Grenze deines Servers keine Rolle.

Rückroll-Pakete aufbewahren (Tage)

Vor jedem Import sichert das Plugin den bisherigen Stand in einem Rückroll-Paket. Nach dieser Anzahl Tage wird das Paket gelöscht, danach lässt sich der Transfer nicht mehr zurückrollen. Der Eintrag in der Transfer-Übersicht bleibt erhalten. Zulässig sind 1 bis 180 Tage, voreingestellt sind 90.

Transfer-Einträge aufbewahren (Tage)

Ältere Einträge der Transfer-Übersicht werden samt ihren Meldungen automatisch gelöscht. Zulässig sind 1 bis 180 Tage, voreingestellt sind 180. Der jüngste erfolgreiche Transfer je Layout bleibt immer stehen, denn auf ihm beruhen der Staging-Abgleich und die Warnung vor Änderungen im Live-Shop.

Klicke nach jeder Änderung auf Speichern.

So verbindest du Live und Staging

Was dir das bringt: Ist die Verbindung eingerichtet, holt der Live-Shop die Erlebniswelten selbst beim Staging-Shop ab. Du musst keine Dateien mehr herunter- und hochladen und siehst im Live-Shop jederzeit, was sich im Staging-Shop geändert hat.

Der Zugang entsteht im Live-Shop. Der Staging-Shop bekommt dabei nie Schreibrechte auf deinen Live-Shop: Er darf nur Erlebniswelten bereitstellen.

Wichtig: Für die Einrichtung braucht dein Benutzer einige zusätzliche Rechte. Bist du nicht Administrator, sieh in Berechtigungen für dein Team nach.

Schritt 1: Einrichtungsassistent im Live-Shop

  1. Öffne im Live-Shop die Plugin-Konfiguration (Erweiterungen → Meine Erweiterungen → Konfigurieren).

  2. Prüfe, dass beide Adressen eingetragen und gespeichert sind.

  3. Scrolle in der Karte Verbindung zum Staging-System nach unten und klicke auf Einrichtungsassistent.

    Schaltflächen „Verbindung testen“ und „Einrichtungsassistent“ Abb. 5: Verbindung testen und Einrichtungsassistent im Live-Shop

  4. Es öffnet sich das Fenster Verbindung zum Staging-System einrichten. Lies den Hinweis und klicke auf Integration anlegen.

    Fenster „Verbindung zum Staging-System einrichten“ Abb. 6: Der Assistent legt die Integration „CMS-Transfer (Staging-Zugriff)“ an.

  5. Der Assistent speichert die Zugangsdaten in der Konfiguration und zeigt dir einen Einrichtungscode. Klicke auf Code kopieren.

Wichtig: Der Code wird nur dieses eine Mal angezeigt, nirgends gespeichert und ist 24 Stunden gültig. Er enthält den geheimen Schlüssel. Gib ihn nur über einen sicheren Weg weiter.

Führst du den Assistenten später erneut aus, ersetzt er die zuvor angelegte Integration. Der Staging-Shop braucht dann den neuen Code oder eine neue Kopie des Live-Shops. Nicht gespeicherte Änderungen auf der Konfigurationsseite gehen dabei verloren — speichere sie vorher.

Schritt 2: Einrichtungscode im Staging-Shop einfügen

  1. Öffne im Staging-Shop die Plugin-Konfiguration. Der Hinweis zeigt dort Rolle: Staging (Quelle), sobald beide Adressen stimmen.

    Plugin-Konfiguration im Staging-Shop mit Rolle „Staging (Quelle)“ Abb. 7: Der Staging-Shop erkennt seine Rolle.

  2. Füge den Code in der Karte Verbindung zum Staging-System in das Feld Einrichtungscode einfügen ein.

  3. Klicke auf Code übernehmen.

    Feld „Einrichtungscode einfügen“ im Staging-Shop Abb. 8: Den Code aus dem Live-Shop im Staging-Shop einfügen

Das Plugin legt im Staging-Shop dieselbe Integration an und übernimmt die Adressen von Live- und Staging-Shop. Die Meldung bestätigt, dass der Shop jetzt als Staging arbeitet. Ist dein Staging-Shop noch gar nicht eingerichtet, trägt das Einfügen des Codes die Adressen gleich mit ein.

Schritt 3: Verbindung testen

Klicke im Live-Shop in der Karte Verbindung zum Staging-System auf Verbindung testen. Der Test prüft die gespeicherten Einstellungen, speichere Änderungen also vorher. Klappt alles, nennt die Meldung die Adresse des Staging-Shops, seine Shopware-Version und seine Plugin-Version.

Tipp: Laufen beide Shops mit unterschiedlichen Shopware-Versionen, weist dich der Test darauf hin. Übertragungen funktionieren trotzdem, im Live-Shop können aber neue Elementtypen fehlen.

Was passiert, wenn du den Staging-Shop neu aus dem Live-Shop kopierst?

Nichts Nachteiliges: Die Zugangsdaten stehen in der Konfiguration des Live-Shops und reisen mit jeder Kopie mit. Die Verbindung funktioniert danach ohne Nacharbeit. Der Staging-Shop zeigt einmalig den Hinweis Kopie des Live-Systems erkannt.

Ohne Assistent einrichten

Du kannst die Verbindung auch von Hand einrichten. Lege dazu im Staging-Shop unter Einstellungen → System → Integrationen eine Integration an, deren Rolle nur die Berechtigung Erlebniswelten exportieren hat. Trage deren Zugangsschlüssel-ID und geheimen Zugangsschlüssel im Live-Shop in der Karte Verbindung zum Staging-System ein, speichere und klicke auf Verbindung testen.

So exportierst du Erlebniswelten im Staging

Was dir das bringt: Du packst fertige Layouts samt Bildern in eine ZIP-Datei. Die lädst du im Live-Shop hoch. Dieser Weg funktioniert immer, auch wenn sich deine Shops gegenseitig nicht erreichen.

Tipp: Hast du die Verbindung aus So verbindest du Live und Staging eingerichtet, brauchst du keinen Export. Der Live-Shop holt die Layouts dann selbst ab (siehe Per Staging-Abgleich übernehmen).

Einzelnes Layout aus der Liste exportieren

  1. Gehe im Staging-Shop zu Inhalte → Erlebniswelten.

  2. Klicke beim gewünschten Layout auf die drei Punkte und wähle Exportieren.

    Kontextmenü eines Layouts mit dem Eintrag „Exportieren“ Abb. 9: Export direkt aus der Liste der Erlebniswelten

Mehrere Layouts auf einmal exportieren

  1. Klicke in der Liste der Erlebniswelten oben rechts auf Mehrere exportieren ….
  2. Wähle im Fenster Erlebniswelten exportieren unter Layouts alle gewünschten Layouts aus.
  3. Lege fest, was zusätzlich mitkommen soll:
    • Zuweisungen mitnehmen: Kategorien, Produkte, Landingpages und Verkaufskanal-Startseiten, die die Layouts nutzen.
    • Standard-Layouts mitnehmen: die Standard-Layouts für Kategorien und Produkte dieses Shops.
    • Landingpages mitnehmen: Landingpages, die eines der Layouts nutzen, mit ihren Adressen und Verkaufskanälen.
  4. Klicke auf Exportieren. Dein Browser lädt die ZIP-Datei herunter.

Fenster „Erlebniswelten exportieren“ mit drei gewählten Layouts Abb. 10: Mehrere Layouts in ein Paket packen

Aus dem Layout-Editor exportieren

Hast du ein Layout gerade geöffnet, klicke oben rechts neben Speichern auf Exportieren.

Layout-Editor mit der Schaltfläche „Exportieren“ Abb. 11: Export aus dem geöffneten Layout

Wichtig: Der Export enthält nur den gespeicherten Stand. Hast du ungespeicherte Änderungen, bittet dich das Plugin, das Layout zuerst zu speichern.

Jeder Export erscheint im Staging-Shop unter Inhalte → Erlebniswelten-Transfer als eigener Eintrag.

So übernimmst du Erlebniswelten im Live-Shop

Was dir das bringt: Bevor sich im Live-Shop etwas ändert, siehst du in einer Vorschau genau, was passiert. Erst wenn du alles bestätigt hast, übernimmt das Plugin die Layouts — und legt vorher automatisch einen Rückroll-Punkt an.

Du hast zwei Wege, die im selben Ablauf enden: Vorschau → Optionen → Ergebnis.

Per Datei importieren

Schritt für Schritt

  1. Gehe im Live-Shop zu Inhalte → Erlebniswelten-Transfer und klicke auf Datei importieren.

  2. Ziehe die ZIP-Datei aus dem Staging-Shop in den Bereich Transfer-Paket (.zip) oder klicke auf Datei auswählen.

  3. Klicke auf Hochladen und prüfen. Das Plugin lädt die Datei hoch und prüft sie, bevor sich irgendetwas ändert.

    Seite „Datei importieren“ mit dem Bereich „Paket hochladen“ Abb. 12: Paket hochladen. Die maximale Paketgröße steht direkt über dem Upload-Bereich.

Die Vorschau lesen

Nach der Prüfung zeigt dir die Karte Paket auf einen Blick, was im Paket steckt und was im Live-Shop passieren wird:

  • Datei, Quelle und Shopware-Version der Quelle sagen dir, woher das Paket stammt.
  • Layouts zeigt, wie viele Layouts neu angelegt, ersetzt oder unverändert bleiben.
  • Medien zeigt, wie viele Bilder neu sind, wiederverwendet werden oder als gleiche Datei im Shop schon vorhanden sind.
  • Landingpages zeigt, wie viele Landingpages neu angelegt oder aktualisiert werden.

Karte „Paket“ der Vorschau Abb. 13: Zusammenfassung des Pakets

In der Karte Layouts im Paket klappst du jedes Layout auf. Dort siehst du, wie viele Sektionen, Blöcke und Elemente neu sind, geändert oder entfernt werden, und welche Medien dazugehören. Die Markierung neben dem Namen zeigt, ob das Layout Neu ist oder Ersetzt wird.

Aufgeklappte Layouts in der Vorschau Abb. 14: Details je Layout

Steht neben einem Layout Hier geändert, hat jemand es seit dem letzten Transfer direkt im Live-Shop bearbeitet. Die Warnung darunter sagt dir, dass diese Änderungen überschrieben werden. Unter Bitte beachten findest du weitere Hinweise, zum Beispiel zu verwendeten CSS-Klassen oder dazu, dass Vorschaubilder neuer Medien im Hintergrund entstehen.

Warnung „Hier geändert“ und Karte „Bitte beachten“ Abb. 15: Warnungen und Hinweise am Ende der Vorschau

Tipp: Verwendet ein Layout eigene CSS-Klassen, listet die Vorschau sie auf. Das passende Styling muss im Theme des Live-Shops vorhanden sein. Theme-Code kommt nicht per Transfer, sondern wie gewohnt über deine Entwicklung bzw. dein Deployment in den Shop.

Wichtig: Hat jemand eines der Layouts gerade im Live-Shop im Editor geöffnet, überschreibt er den Import beim nächsten Speichern. Die Vorschau weist mit Geöffnete Editoren schließen darauf hin. Sprich dich vorher kurz ab.

Ist alles in Ordnung, klicke auf Weiter zu den Optionen.

Vorschau verwerfen

Willst du das Paket doch nicht übernehmen, klicke auf Verwerfen. Es wird nichts geändert, und ein anderer Transfer kann sofort starten. Auch wenn du die Seite verlässt, wird eine offene Vorschau verworfen.

Meldung nach dem Verwerfen der Vorschau Abb. 16: Die Vorschau wurde verworfen, der Live-Shop ist unverändert.

Optionen wählen

In der Karte Optionen legst du fest, was zusätzlich zu den Layouts übernommen wird. Die Schalter sind mit deinen Vorauswahlen aus der Plugin-Konfiguration vorbelegt (siehe Einstellungen):

  • Zuweisungen übernehmen: Die Layouts denselben Kategorien, Produkten, Landingpages und Verkaufskanal-Startseiten zuweisen wie im Staging-Shop.
  • Standard-Layouts übernehmen: Die Standard-Layouts für Kategorien und Produkte wie im Paket setzen.
  • Landingpages übernehmen: Die Landingpages des Pakets mit Adressen und Verkaufskanälen anlegen oder aktualisieren.
  • Übersetzungen, die nur in diesem System existieren: Behalten verliert nie Inhalte, Entfernen macht ersetzte Layouts identisch mit dem Paket.

Karte „Optionen“ und Karte „Bestätigung“ Abb. 17: Optionen des Imports

Warnungen bestätigen

In der Karte Bestätigung stehen alle Punkte, die du bewusst freigeben musst — etwa Änderungen in diesem System, die überschrieben werden oder weitere Warnungen. Setze bei jedem Punkt ein Häkchen oder klicke auf Alle bestätigen. Solange nicht alles bestätigt ist, bleibt Übernehmen ausgegraut.

Bestätigung mit noch nicht gesetztem Häkchen Abb. 18: Ohne Bestätigung ist „Übernehmen“ gesperrt.

Bestätigung mit gesetztem Häkchen Abb. 19: Alles bestätigt, „Übernehmen“ ist aktiv.

Mit Zurück zur Vorschau kehrst du zur Vorschau zurück, mit Alle Bestätigungen zurücknehmen entfernst du alle Häkchen wieder.

Übernehmen und Ergebnis prüfen

Klicke auf Übernehmen. Das Plugin legt zuerst einen Rückroll-Punkt an und schreibt dann alle Layouts in einem Schritt. Die Seite aktualisiert sich dabei selbst. Danach erscheint Transfer … abgeschlossen.

Ergebnis nach dem Import Abb. 20: Der Transfer ist abgeschlossen, ein Rückroll-Punkt steht bereit.

In der Karte Ergebnis findest du den Transfer-Eintrag mit allen Details und Links zu den übernommenen Layouts. Unter Im Frontend stehen Links zu den Kategorien, die die Layouts nutzen. Mit Weitere Datei importieren startest du den nächsten Import.

Wichtig: Ein Import läuft immer ganz oder gar nicht. Tritt unterwegs ein Fehler auf, bleibt der Live-Shop unverändert, und bereits abgelegte Bilder werden wieder entfernt.

Per Staging-Abgleich übernehmen

Was dir das bringt: Du siehst im Live-Shop direkt, welche Layouts und Landingpages sich im Staging-Shop geändert haben, und übernimmst sie mit einem Klick — ohne Datei. Voraussetzung ist die Verbindung aus So verbindest du Live und Staging.

Unterschiede ansehen

  1. Gehe im Live-Shop zu Inhalte → Erlebniswelten-Transfer und klicke auf Staging-Abgleich.
  2. Die Karte Staging und Live im Vergleich zeigt alle Layouts. Im Reiter Landingpages siehst du die Landingpages.

Seite „Staging-Abgleich“ mit allen Layouts und ihrem Status Abb. 21: Staging und Live im Vergleich

Die Spalte Status sagt dir für jeden Eintrag, wie Staging und Live zueinander stehen:

  • unverändert: Staging und Live sind gleich.
  • im Staging geändert: Im Staging-Shop gibt es einen neueren Stand.
  • nur im Staging: Das Layout gibt es im Live-Shop noch nicht.
  • im Live geändert: Jemand hat das Layout im Live-Shop bearbeitet.
  • beidseitig geändert: Das Layout wurde in beiden Shops geändert.
  • verschieden (noch nie übertragen): Beide Shops haben das Layout, es wurde aber noch nie übertragen und ist unterschiedlich.
  • nur im Live: Das Layout gibt es nur im Live-Shop. Solche Einträge werden nie automatisch gelöscht.
  • wird berechnet: Das Plugin ermittelt den Status noch im Hintergrund. Die Liste lädt sich selbst neu.

Mit dem Schalter Nur geänderte blendest du alles aus, was gleich ist. Neu laden holt den aktuellen Stand, Verbindung testen prüft die Verbindung zum Staging-Shop.

Auswählen und übernehmen

  1. Setze bei den gewünschten Layouts bzw. Landingpages ein Häkchen.

  2. Klicke oben rechts auf Aus Staging übernehmen. Die Zahl in Klammern zeigt, wie viele Einträge ausgewählt sind.

    Zwei ausgewählte Layouts im Staging-Abgleich Abb. 22: Auswahl für die Übernahme

  3. Der Live-Shop holt das Paket beim Staging-Shop ab. Die Seite Aus Staging übernehmen zeigt dabei den aktuellen Schritt. Danach öffnet sich dort die Vorschau.

  4. Prüfe die Vorschau genauso wie beim Datei-Import: Karte Paket und Layouts im Paket.

    Vorschau des abgeholten Pakets Abb. 23: Zusammenfassung des abgeholten Pakets

    Aufgeklappte Layouts des abgeholten Pakets Abb. 24: Details je Layout, inklusive wiederverwendeter Bilder

  5. Klicke auf Weiter zu den Optionen, wähle die Optionen, bestätige alle Warnungen und klicke auf Übernehmen.

  6. Nach der Übernahme erscheint Transfer … abgeschlossen mit dem Ergebnis.

Ergebnis nach der Übernahme aus dem Staging-Shop Abb. 25: Die Layouts sind übernommen, ein Rückroll-Punkt steht bereit.

Während ein Transfer läuft, zeigt das Plugin oben den Hinweis Transfer läuft, und weitere Importe sind gesperrt. Sobald der Transfer abgeschlossen ist, verschwindet der Hinweis wieder.

Wichtig: Solange eine Vorschau aus dem Staging-Abgleich offen ist, sind weitere Transfers gesperrt. Übernimm das Paket oder klicke auf Verwerfen — dann ist die Sperre sofort aufgehoben. Verlässt du die Seite, wird die Vorschau ebenfalls verworfen.

Tipp: Erreicht der Live-Shop den Staging-Shop einmal nicht, bleibt der Datei-Weg aus Per Datei importieren jederzeit verfügbar.

CMS-Erweiterungen auf Staging und Live

Was dir das bringt: Du kannst Layouts mit Elementen aus anderen Plugins (etwa Countdowns, Slider oder Formulare) gefahrlos übertragen. Fehlt dem Live-Shop etwas, merkst du es in der Vorschau — bevor sich im Live-Shop etwas ändert.

Warum das wichtig ist

Viele Shops nutzen neben den Standard-Elementen von Shopware zusätzliche CMS-Erweiterungen. Ein Layout, das du im Staging-Shop mit einem solchen Element baust, funktioniert im Live-Shop nur, wenn dort dieselbe Erweiterung installiert ist.

Der Erlebniswelten Transfer prüft das bei jedem Import, bevor im Live-Shop etwas geändert wird. Fehlt etwas, siehst du es in der Vorschau des Import-Assistenten. Der Live-Shop bleibt in diesem Fall unverändert.

Was der Transfer prüft

Für jedes Element und jeden Block im Paket schaut das Plugin nach, ob der Live-Shop diesen Typ kennt:

  • Ein Element gilt als vorhanden, wenn der Live-Shop es darstellen oder mit Daten versorgen kann.
  • Ein Block gilt als vorhanden, wenn der Live-Shop eine eigene Darstellung dafür hat.

Was in welchem Fall passiert

Ein Element fehlt im Live-Shop. Die Vorschau meldet den Fehler „Elementtyp „…“ ist im Zielsystem nicht installiert. Erweiterung installieren und erneut übertragen.“ Der Transfer ist dann gesperrt, auch eine Bestätigung hilft nicht. Das gilt für das ganze Paket: Enthält es fünf Layouts und nur eines nutzt das fehlende Element, wird keines übertragen. So kommt ein Transfer nie halb an.

Holst du das Paket über den Staging-Abgleich, zeigt die Seite Das Paket wurde abgewiesen und Es wurde nichts geändert. Über den Link öffnest du den Transfer-Eintrag. Dort steht der fehlende Elementtyp im Reiter Meldungen (siehe So behältst du deine Transfers im Blick).

Paket abgewiesen, weil ein Elementtyp im Live-Shop fehlt Abb. 26: Der Live-Shop weist das Paket ab und bleibt unverändert.

So löst du es: Installiere die Erweiterung im Live-Shop und starte den Transfer erneut. Alternativ lässt du das betroffene Layout beim Export bzw. beim Abgleich weg.

Nur ein Block fehlt im Live-Shop. Die Vorschau zeigt die Warnung „Blocktyp „…“ ist im Zielsystem unbekannt; der Block wird ohne eigene Darstellung übernommen.“ Nach deiner Bestätigung wird das Layout übertragen. Die Elemente im Block funktionieren, nur dessen besondere Anordnung fehlt. Prüfe die Seite danach im Live-Shop.

Eine Erweiterung speichert eigene Daten. Manche Erweiterungen legen zusätzlich zum Layout eigene Daten an, zum Beispiel Vorlagen oder Formulare, und binden sich dafür an den Transfer an. Fehlt eine solche Erweiterung im Live-Shop, erscheint die Warnung „Erweiterung „…“ fehlt im Zielsystem; ihre Daten werden nicht übernommen.“ Das Layout geht nach deiner Bestätigung trotzdem rüber, die Zusatzdaten nicht. Ist die Erweiterung im Live-Shop älter als im Staging-Shop, meldet der Transfer das ebenfalls und bittet um ein Update im Live-Shop.

Was der Transfer nicht prüfen kann

  • Ob die Erweiterung im Live-Shop für den Verkaufskanal eingeschaltet ist. Eine deaktivierte Erweiterung erkennt der Transfer als fehlend. Ist sie dagegen aktiv, aber in ihren eigenen Einstellungen für einen Verkaufskanal abgeschaltet, besteht sie die Prüfung — und die Seite zeigt den Inhalt in diesem Kanal nicht an.
  • Ob die Erweiterung im Live-Shop dieselbe Version hat. Hat sie zwischen zwei Versionen ihre Einstellungen umgebaut, übernimmt der Transfer die Einstellungen aus dem Staging-Shop unverändert. Ausnahme: Die Erweiterung ist an den Transfer angebunden, dann meldet er Versionsunterschiede selbst.

Unsere Empfehlung

Halte Staging- und Live-Shop bei den CMS-Erweiterungen gleich: dieselben Erweiterungen, aktiv, in derselben Version. Installiere und aktiviere eine neue CMS-Erweiterung zuerst im Live-Shop und baue erst danach Layouts damit im Staging-Shop.

So behältst du deine Transfers im Blick

Was dir das bringt: Jeder Export, Import und jedes Zurückrollen landet mit Status, Meldungen und allen Details in einer Übersicht. So weißt du jederzeit, wer wann was übertragen hat — und warum ein Transfer nicht geklappt hat.

Die Transfer-Übersicht

Gehe zu Inhalte → Erlebniswelten-Transfer. Die Liste Transfers zeigt alle Einträge, den neuesten oben.

Transfer-Übersicht mit Filtern und Status Abb. 27: Transfer-Übersicht im Live-Shop

  • Nr.: die fortlaufende Nummer des Transfers, zum Beispiel T-13.
  • Zeitpunkt, Layouts und Nutzer: wann, was und wer.
  • Weg: Datei, Staging-Abruf, Kommandozeile oder Zurückrollen. Im Staging-Shop steht bei Abrufen des Live-Shops Von Live abgeholt.
  • Status: läuft, erfolgreich, erfolgreich mit Hinweisen, fehlgeschlagen oder zurückgerollt.
  • Hinweise: die Zahl der Warnungen und Fehler. Fährst du mit der Maus darüber, siehst du die Meldung.

Tooltip in der Spalte „Hinweise“ Abb. 28: Die Meldung eines fehlgeschlagenen Transfers direkt in der Liste

Mit den Filtern Status, Weg, Zeitraum, Layout und Nutzer findest du einen bestimmten Transfer schnell. Die Filter stehen in der Adresszeile deines Browsers, du kannst den Link also an Kollegen weitergeben. Mit Filter zurücksetzen zeigst du wieder alle Einträge.

Über die drei Punkte am Ende einer Zeile öffnest du die Details. Ist ein Abruf aus dem Staging-Shop fehlgeschlagen, findest du dort auch Erneut ausführen.

Tipp: Ist seit deinem letzten Besuch ein Transfer fehlgeschlagen, weist dich das Plugin beim Öffnen der Übersicht mit Fehlgeschlagene Transfers darauf hin.

Die Details eines Transfers

Klicke auf eine Zeile, um die Details zu öffnen. Mit Zur Übersicht kommst du zurück.

Reiter „Übersicht“: Oben steht der Status. Die Karte Ergebnis in Zahlen zeigt, wie viele Layouts, Sections, Blöcke, Elemente und Medien neu, ersetzt, geändert, entfernt oder wiederverwendet wurden und wie viele Adressen umgeschrieben wurden. Darunter folgen der Ablauf, Quelle und Paket sowie die gewählten Optionen.

Reiter „Übersicht“ eines erfolgreichen Transfers Abb. 29: Ergebnis in Zahlen

Reiter „Layouts“: Jedes übertragene Layout mit seiner Aktion (zum Beispiel neu oder ersetzt) und der Angabe, ob es einen Konflikt mit Änderungen im Live-Shop gab. Über einen Link öffnest du das Layout im Editor.

Reiter „Layouts“ eines Transfers Abb. 30: Übertragene Layouts

Reiter „Medien“: Jedes Bild mit Vorschau, Dateiname, Aktion (zum Beispiel neu, wiederverwendet oder dedupliziert) und den Fundstellen. Über In der Medienverwaltung öffnen springst du direkt zum Bild.

Reiter „Medien“ eines Transfers Abb. 31: Übertragene Bilder

Reiter „Meldungen“: Alle Hinweise, Warnungen und Fehler des Transfers mit ihrer Fundstelle. Gab es keine, steht dort Keine Meldungen zu diesem Transfer.

Reiter „Meldungen“ ohne Einträge Abb. 32: Ein Transfer ohne Meldungen

Reiter „Landingpages“: Erscheint nur, wenn mit dem Transfer Landingpages übertragen wurden. Er zeigt jede Landingpage mit ihren Adressen und Verkaufskanälen.

Reiter „Zurückrollen“: Hier siehst du, ob sich der Transfer zurückrollen lässt, und startest das Zurückrollen (siehe So rollst du einen Transfer zurück).

Reiter „Zurückrollen“ Abb. 33: Rückroll-Status und Rückroll-Paket

Wenn ein Transfer fehlgeschlagen ist

Ein fehlgeschlagener Transfer zeigt oben Transfer fehlgeschlagen und den Satz Es wurde nichts geändert: Der Import wurde vollständig zurückgenommen. Darunter stehen die Phase, in der der Fehler auftrat, die Meldung und eine Fehlerreferenz.

Detailansicht eines fehlgeschlagenen Transfers Abb. 34: Fehlgeschlagener Transfer mit Phase und Fehlerreferenz

Den genauen Grund findest du im Reiter Meldungen. Im Beispiel fehlt im Live-Shop ein Elementtyp: „Elementtyp „…“ ist im Zielsystem nicht installiert. Erweiterung installieren und erneut übertragen.“ Wie du das löst, steht in CMS-Erweiterungen auf Staging und Live. Mit den Filtern Code und Layout grenzt du bei vielen Meldungen die Liste ein.

Reiter „Meldungen“ eines fehlgeschlagenen Transfers Abb. 35: Die Meldung nennt den fehlenden Elementtyp.

Tipp: Brauchst du Hilfe vom Support, klicke neben der Fehlerreferenz auf Kopieren und schick uns die Referenz mit. Damit finden wir den Fehler im Protokoll sofort.

Einträge aus einer Shop-Kopie

Kopierst du deinen Live-Shop in den Staging-Shop, wandern auch die Einträge der Transfer-Übersicht mit. Das Plugin erkennt solche Einträge und kennzeichnet sie mit Kopie aus … und der Adresse des Ursprungs-Shops. Sie sind nur lesbar: Du kannst sie weder zurückrollen noch erneut ausführen.

So rollst du einen Transfer zurück

Was dir das bringt: Gefällt dir das Ergebnis eines Imports nicht, stellst du den vorherigen Stand mit wenigen Klicks wieder her — inklusive der Layouts und Landingpages, die der Import neu angelegt hat.

Schritt für Schritt

  1. Öffne in der Transfer-Übersicht den Transfer, den du zurücknehmen willst.

  2. Wechsle in den Reiter Zurückrollen. Steht dort Kann zurückgerollt werden., klicke auf Zurückrollen (siehe Abb. 33).

  3. Es öffnet sich Transfer zurückrollen mit einer Vorschau. Sie zeigt, welche Layouts wiederhergestellt werden und unter Wieder entfernte Layouts, welche neu angelegten Layouts wieder verschwinden.

    Vorschau „Zurückrollen von T-13“ Abb. 36: Vorschau des Zurückrollens

  4. Bestätige eventuelle Warnungen und klicke auf Zurückrollen. Die Optionen sind dabei fest: Ein Zurückrollen stellt genau den gesicherten Stand wieder her.

  5. Danach erscheint Transfer … abgeschlossen mit Der vorherige Stand wurde wiederhergestellt.

Ergebnis nach dem Zurückrollen Abb. 37: Der vorherige Stand ist wiederhergestellt.

Das Zurückrollen erhält eine eigene Nummer und erscheint in der Übersicht mit dem Weg Zurückrollen. Im ursprünglichen Transfer steht danach unter Zurückgerollt durch, welcher Eintrag ihn zurückgenommen hat.

Wann Zurückrollen nicht möglich ist

Im Reiter Zurückrollen steht unter Rückroll-Status, warum es gerade nicht geht:

  • Nur Importe können zurückgerollt werden. Exporte ändern nichts am Shop.
  • Nur erfolgreiche Transfers können zurückgerollt werden. Ein fehlgeschlagener Import hat nichts geändert.
  • Dieser Transfer wurde bereits zurückgerollt.
  • Zuerst … zurückrollen. Es gibt einen neueren Transfer für dieselben Layouts. Rolle zuerst diesen zurück.
  • Das Rückroll-Paket ist abgelaufen. Die Aufbewahrungsfrist aus der Plugin-Konfiguration ist vorbei.
  • Dieser Eintrag stammt aus einer Kopie eines anderen Systems und kann hier nicht zurückgerollt werden.

Wichtig: Hat jemand ein Layout nach dem Transfer im Live-Shop geändert, warnt dich die Vorschau: Diese Änderungen gehen beim Zurückrollen verloren. Ein Layout, das noch einer Kategorie zugewiesen oder ein Standard-Layout ist, kann nicht entfernt werden — die Vorschau nennt dir das betroffene Layout.

Tipp: Mit Rückroll-Paket herunterladen sicherst du den Stand vor dem Import zusätzlich auf deinem Rechner.

Berechtigungen für dein Team

Was dir das bringt: Du legst genau fest, wer Transfers nur ansehen, wer im Staging-Shop exportieren und wer im Live-Shop übernehmen darf.

Die Rechte vergibst du unter Einstellungen → System → Benutzer & Rechte in der Karte Rollen. Öffne eine Rolle oder klicke auf Rolle erstellen.

Die drei Rechte des Plugins

  • Ansehen: Unter Berechtigungen im Bereich Inhalte in der Zeile Erlebniswelten-Transfer. Damit sieht jemand die Transfer-Übersicht, die Details und den Staging-Abgleich.
  • Erlebniswelten exportieren: Unter Zusätzliche Berechtigungen beim Eintrag Erlebniswelten-Transfer. Damit darf jemand Layouts im Staging-Shop exportieren.
  • Erlebniswelten importieren und zurückrollen: Ebenfalls unter Zusätzliche Berechtigungen beim Eintrag Erlebniswelten-Transfer. Damit darf jemand Pakete importieren, aus dem Staging-Shop übernehmen, die Verbindung testen und Transfers zurückrollen.

Exportieren und Importieren setzen das Recht Ansehen voraus. Meldungen im Plugin nennen genau diese Bezeichnung.

Wichtig: Wer Erlebniswelten importieren und zurückrollen hat, kann über den Import Layouts, Zuweisungen, Standard-Layouts und Landingpages im Live-Shop überschreiben — auch wenn der Rollen-Editor bei dieser Berechtigung für Erlebniswelten nur Leserechte anzeigt. Vergib dieses Recht deshalb nur an Personen, die Inhalte im Live-Shop freigeben dürfen.

Zusätzliche Rechte für die Einrichtung

Der Einrichtungsassistent im Live-Shop und das Einfügen des Einrichtungscodes im Staging-Shop legen eine Integration samt Rolle an. Dafür braucht dein Benutzer zusätzlich zu Erlebniswelten importieren und zurückrollen diese Shopware-Rechte:

  • unter Zusätzliche Berechtigungen → Einstellungen: Grundlegende Einstellungen (zum Speichern der Konfiguration),
  • unter Berechtigungen → Einstellungen → Integrationen: Erstellen und Löschen,
  • unter Berechtigungen → Einstellungen → Benutzer & Rechte: Erstellen und Löschen.

Beim Häkchen Erstellen setzt Shopware die dafür nötigen Häkchen bei Ansehen und Bearbeiten automatisch mit. Administratoren haben alle Rechte ohnehin. Fehlt etwas, nennt der Einrichtungsassistent die fehlenden Rechte. Bitte dann einen Administrator, sie deiner Rolle zuzuweisen.

Datenschutz

Das Transfer-Protokoll speichert bei jedem Transfer den Namen des Benutzers, der ihn gestartet hat. Das ist ein personenbezogenes Datum. Die Vorschau weist dich unter Bitte beachten darauf hin.

  • Wozu: Du siehst in der Übersicht, wer welchen Transfer ausgelöst hat.
  • Wie lange: So lange, wie du Transfer-Einträge aufbewahrst. Die Frist stellst du in der Plugin-Konfiguration unter Transfer-Einträge aufbewahren (Tage) ein (höchstens 180 Tage). Rückroll-Pakete haben eine eigene Frist.
  • Beim Löschen eines Benutzers: Löschst du einen Benutzer der Administration, entfernt das Plugin seinen Namen automatisch aus allen Transfer-Einträgen.

Das Plugin sendet keine Daten an Dritte. Verbindungen gibt es nur zwischen deinem Live-Shop und deinem Staging-Shop, ausschließlich verschlüsselt über https://.

Fehlerbehebung

Der Menüpunkt „Erlebniswelten-Transfer“ fehlt

Woran es liegt: Das Plugin ist nicht aktiv, dein Benutzer hat nicht das Recht Ansehen oder der Zwischenspeicher (Cache) ist veraltet.

So behebst du es:

  1. Öffne Erweiterungen → Meine Erweiterungen und prüfe, ob das Plugin aktiviert ist.
  2. Prüfe die Rechte deiner Rolle (siehe Berechtigungen für dein Team).
  3. Leere den Cache unter Einstellungen → System → Caches & Indizes.

Der Shop zeigt „System nicht zugeordnet“

Woran es liegt: Keine der eingetragenen Adressen stimmt mit der eigenen Adresse des Shops überein, eine Adresse beginnt nicht mit https://, oder beide Adressen zeigen auf denselben Shop.

So behebst du es: Vergleiche in der Plugin-Konfiguration die Eigene Adresse im Rollen-Hinweis mit den eingetragenen Adressen und korrigiere sie. Datei-Export und -Import funktionieren auch ohne Zuordnung.

Der Staging-Abgleich meldet „Verbindung zum Staging-System fehlt“ oder „Staging-System nicht erreichbar“

Woran es liegt: Die Verbindung ist nicht eingerichtet oder der Live-Shop kommt nicht beim Staging-Shop an. Die Meldung nennt den Grund:

  • Zugangsschlüssel abgelehnt: Zugangsschlüssel-ID oder geheimer Schlüssel stimmen nicht. Führe den Einrichtungsassistenten erneut aus.
  • Verzeichnisschutz: Der Bereich /api/ des Staging-Shops ist geschützt. Lass ihn vom Schutz ausnehmen.
  • Keine Antwort innerhalb der Zeit: Erhöhe die Zeitüberschreitung in Sekunden.
  • Zertifikat: Die verschlüsselte Verbindung scheitert. Lass das Zertifikat des Staging-Shops prüfen.
  • Nicht erreichbar: Prüfe die Adresse des Staging-Shops.
  • Keine passende Transfer-Schnittstelle: Installiere in beiden Shops dieselbe Plugin-Version.

So behebst du es: Behebe den genannten Grund und klicke auf Verbindung testen. Bis dahin kannst du jederzeit den Datei-Weg nutzen.

„Elementtyp … ist im Zielsystem nicht installiert“, der Import lässt sich nicht starten

Woran es liegt: Die CMS-Erweiterung, die dieses Element liefert, fehlt im Live-Shop.

So behebst du es: Installiere die Erweiterung dort und übertrage erneut, oder nimm das Layout aus dem Paket. Details stehen in CMS-Erweiterungen auf Staging und Live.

„Gerade läuft ein anderer Transfer“

Woran es liegt: Es kann immer nur ein Transfer gleichzeitig laufen. Auch eine offene Vorschau aus dem Staging-Abgleich sperrt weitere Transfers.

So behebst du es: Warte, bis der laufende Transfer abgeschlossen ist. Über Transfer öffnen im Hinweis Transfer läuft siehst du, welcher es ist. Eine offene Vorschau, die niemand mehr braucht, beendest du mit Verwerfen. Ein Lauf, der länger als eine Stunde keinen Fortschritt macht, wird automatisch abgebrochen.

„Die Vorschau ist abgelaufen“ oder „Das Zielsystem hat sich seit der Vorschau geändert“

Woran es liegt: Eine Vorschau gilt 30 Minuten. Hat sich im Live-Shop inzwischen etwas geändert, ist sie nicht mehr aktuell.

So behebst du es: Lade die Datei erneut hoch bzw. starte die Übernahme im Staging-Abgleich neu.

Die Datei wird beim Hochladen abgewiesen

Woran es liegt: Die Datei ist größer als die Maximale Paketgröße für Uploads (MB) oder kein gültiges Transfer-Paket. Stammt sie aus einer neueren Plugin-Version, meldet das Plugin das ebenfalls.

So behebst du es: Exportiere weniger Layouts auf einmal oder erhöhe die Grenze in der Plugin-Konfiguration. Bring das Plugin in beiden Shops auf denselben Stand.

Der Status im Staging-Abgleich bleibt auf „wird berechnet“

Woran es liegt: Das Plugin berechnet den Status im Hintergrund. Dafür muss auf dem Server ein Hintergrundprozess laufen.

So behebst du es: Bitte deinen Administrator, die Hintergrundverarbeitung zu prüfen (siehe Für Administratoren / Technische Details).

Die Daten wurden übertragen, aber die Seite im Shop zeigt noch den alten Stand

Woran es liegt: Die Layouts sind übernommen, nur das Aktualisieren der SEO-URLs oder des Shop-Caches ist fehlgeschlagen. Der Transfer-Eintrag weist darauf hin.

So behebst du es: Baue Cache und Indizes unter Einstellungen → System → Caches & Indizes neu auf.

Der Einrichtungscode wird nicht angenommen

Woran es liegt: Die Meldung nennt den Grund — der Code ist unvollständig kopiert, verändert, älter als 24 Stunden, stammt aus einer anderen Plugin-Version oder wurde im Live-Shop statt im Staging-Shop eingefügt.

So behebst du es: Erzeuge im Live-Shop mit dem Einrichtungsassistenten einen neuen Code und füge ihn vollständig im Staging-Shop ein.

„Zum Importieren von Paketen brauchen Sie … das Recht „Erlebniswelten importieren und zurückrollen““

Woran es liegt: Deiner Rolle fehlt die Berechtigung Erlebniswelten importieren und zurückrollen.

So behebst du es: Bitte einen Administrator, sie deiner Rolle zuzuweisen (siehe Berechtigungen für dein Team).

FAQ

F: Muss ich das Plugin in beiden Shops installieren?

A: Ja. Der Staging-Shop exportiert und liefert, der Live-Shop übernimmt. Installiere in beiden dieselbe Plugin-Version.

F: Überträgt das Plugin auch Produkte und Kategorien?

A: Nein. Es überträgt Erlebniswelten, Landingpages und auf Wunsch deren Zuweisungen. Fehlt ein Produkt oder eine Kategorie im Live-Shop, zeigt die Vorschau eine Warnung mit der Fundstelle.

F: Was passiert, wenn jemand das Layout inzwischen im Live-Shop geändert hat?

A: Die Vorschau markiert das Layout mit Hier geändert und warnt dich. Übernommen wird erst, wenn du die Warnung bestätigst.

F: Ich habe im Staging-Shop eine CMS-Erweiterung benutzt, die im Live-Shop fehlt. Geht dabei etwas kaputt?

A: Nein. Der Transfer erkennt das in der Vorschau und ändert im Live-Shop nichts, bis die Erweiterung dort installiert ist.

F: Kann ich einen Import rückgängig machen?

A: Ja, solange das Rückroll-Paket noch aufbewahrt wird (standardmäßig 90 Tage). Siehe So rollst du einen Transfer zurück.

F: Was passiert, wenn wir den Staging-Shop neu aus dem Live-Shop kopieren?

A: Die Verbindung bleibt gültig. Mitkopierte Einträge der Transfer-Übersicht kennzeichnet das Plugin als Kopie aus ….

F: Unsere Shops erreichen sich nicht gegenseitig. Kann ich das Plugin trotzdem nutzen?

A: Ja. Nutze den Datei-Weg: Export im Staging-Shop, Datei importieren im Live-Shop. Der Ablauf mit Vorschau und Rückroll-Punkt ist derselbe.

F: Kommen meine Bilder doppelt in die Medienverwaltung?

A: Nein. Ist dieselbe Datei im Live-Shop schon vorhanden, verwendet das Plugin sie wieder.

F: Funktioniert das Plugin mit Shopware SaaS oder Shopware Cloud?

A: Nein. Du brauchst eine selbst betriebene Shopware-Installation.

Für Administratoren / Technische Details

Dieser Abschnitt richtet sich an technische Administratoren. Für die normale Nutzung brauchst du ihn nicht.

Systemanforderungen

  • Shopware: 6.7
  • PHP: 8.2 oder neuer
  • Plugin im Staging- und im Live-Shop installiert, möglichst in derselben Version
  • Beide Shops über https:// erreichbar; der Abruf läuft vom Live-Shop zum Staging-Shop, ohne Weiterleitungen

Hintergrundverarbeitung

Import, Paketbau und Abruf aus dem Staging-Shop laufen über die Nachrichten-Warteschlange von Shopware, die Vorberechnung der Prüfsummen für den Staging-Abgleich über die Warteschlange low_priority. Auf beiden Shops muss ein Worker laufen, der async und low_priority abarbeitet:

bin/console messenger:consume async low_priority

Ohne low_priority bleibt der Abgleich bei großen Installationen auf „wird berechnet“. Der Admin-Worker reicht nur, solange die Administration geöffnet ist.

Die Aufräumarbeiten (hängende Läufe, abgelaufene Vorschauen und Uploads, alte Pakete, Rückroll-Pakete und Transfer-Einträge nach Ablauf der Fristen) laufen stündlich als geplante Aufgabe. Dafür muss der Scheduler laufen:

bin/console scheduled-task:run

Mehrere App-Server

Läuft der Live-Shop auf mehreren Servern, setze LOCK_DSN auf einen gemeinsam genutzten Speicher (zum Beispiel Redis oder die Datenbank). Sonst greift die Sperre gegen parallele Transfers nur je Server.

Verzeichnisschutz auf dem Staging-Shop

Ist der Staging-Shop per Basic-Auth geschützt, nimm den Pfad /api/ davon aus. Die Zugangsdaten für den Verzeichnisschutz sendet der Live-Shop nur beim Abruf des Zugangstokens; alle weiteren Aufrufe brauchen den Header Authorization für das OAuth-Token.

Protokoll

Das Plugin schreibt in eine eigene Logdatei: var/log/SwpCmsTransferSix-<Datum>.log (ab Stufe Warnung, täglich rollierend). Die Fehlerreferenz aus dem Transfer-Eintrag findest du dort wieder.

Technische Rechte-IDs

Die Rechte des Plugins heißen intern swp_cms_transfer.viewer (Ansehen), swp_cms_transfer.exporter (Erlebniswelten exportieren) und swp_cms_transfer.importer (Erlebniswelten importieren und zurückrollen). Einrichtungsassistent und Einrichtungscode prüfen diese sieben Rechte:

swp_cms_transfer.importer
system_config:update
integration:create
integration:delete
integration_role:create
acl_role:create
acl_role:delete

Die vom Assistenten angelegte Integration „CMS-Transfer (Staging-Zugriff)“ erhält ausschließlich swp_cms_transfer.exporter. Hinweis: swp_cms_transfer.importer erscheint im Rollen-Editor ohne Schreibrechte auf cms_page; der Import schreibt trotzdem Layouts, Zuweisungen, Standard-Layouts und Landingpages im Live-Shop.

Kommandozeile

bin/console swp:cms-transfer:export <layoutId…> --file=/pfad/paket.zip [--default-category-layout] [--default-product-layout] [--with-assignments] [--with-defaults] [--with-landing-pages]
bin/console swp:cms-transfer:import /pfad/paket.zip [--dry-run] [--with-assignments] [--with-defaults] [--with-landing-pages] [--remove-live-only-translations] [--force-warnings]
bin/console swp:cms-transfer:rollback <transferId> | --last [--force-warnings]
bin/console swp:cms-transfer:list [--limit=50] [--only-changed]

Exit-Codes von Import und Rollback: 0 erfolgreich, 1 Blocker oder Fehler, 2 Warnungen ohne --force-warnings. Die Befehle prüfen keine Rolle (Betreiber-Werkzeug) und nutzen dieselbe Sperre wie die Administration. Transfers über die Kommandozeile erscheinen in der Übersicht mit dem Weg Kommandozeile.

Installation über die Kommandozeile

php bin/console plugin:refresh
php bin/console plugin:install SwpCmsTransferSix --activate
php bin/console cache:clear

Deinstallation

Deinstallierst du das Plugin ohne „Daten behalten“, entfernt es seine Tabellen, seinen Nummernkreis, die angelegte Integration für den Staging-Zugriff und seine Dateien. Übertragene Erlebniswelten und Medien bleiben im Shop.

Anhang für Entwickler: Eigene CMS-Elemente anbinden

Dieser Anhang richtet sich an Entwickler anderer Plugins. Gilt ab Version 6.7.0, Paketformat 1.

Wozu die Schnittstelle da ist

Der Erlebniswelten Transfer überträgt Layouts samt Sektionen, Blöcken, Elementen, Übersetzungen und Medien. Verweise in Element-Konfigurationen findet er pauschal: Jede UUID in einem Wert mit source: static wird eingesammelt und im Zielsystem als Medium, Produkt, Kategorie oder dynamische Produktgruppe zugeordnet. Bild-Adressen in HTML-Texten werden erkannt und umgeschrieben.

Das reicht für die Standard-Elemente von Shopware und für die meisten Plugin-Elemente. Nicht erfasst werden:

  • eigene Entitäten eines Plugins (zum Beispiel Vorlagen, Raster-Definitionen, Formulare), die das Zielsystem erst anlegen muss,
  • verschachtelte Inhalte, etwa Elemente in einem Grid-Container, deren Konfiguration als eigener Baum gespeichert ist,
  • IDs in zusammengesetzten Zeichenketten, etwa product:<id>|Titel oder serialisierte Werte.

Ohne Anbindung bleiben solche Werte unverändert stehen; unbekannte UUIDs erscheinen in der Vorschau als Hinweis. Mit einem Reference-Provider meldet dein Plugin diese Verweise gezielt, legt eigene Daten ins Paket und schreibt sie im Zielsystem in derselben Transaktion wie die Layouts.

Für kleinere Anpassungen ohne eigenen Provider stehen zwei Events bereit (siehe unten).

Ablauf im Überblick

SchrittSystemAufrufDarf schreiben
ExportQuellesupports() je Element, collect() je Element und Sprache, danach einmal export()nein
Paket bauenQuelleEvent CmsTransferPackageBuildEventnein
VorschauZielplan() einmal je Paket, danach Event CmsTransferImportPlanEventnein
ÜbernehmenZielimport() einmal je Paket, innerhalb der Import-Transaktionja

Zusätzlich gilt: Vor jedem Import legt das Plugin einen Rückroll-Punkt im Paketformat an. Dafür laufen collect()/export() und das Build-Event auch im Zielsystem über den aktuellen Live-Stand der betroffenen Layouts. Beim Zurückrollen wird dieser Rückroll-Punkt wie ein normales Paket importiert, dein import() also erneut aufgerufen. import() muss deshalb einen vorhandenen Stand überschreiben können (Upsert mit festen IDs), nicht nur anlegen.

Das Interface

Swp\CmsTransferSix\Extension\CmsTransferReferenceProviderInterface

MethodeAufgabe
getName(): stringFester technischer Name, zugleich Dateiname extensions/<name>.json im Paket. Muster [a-z0-9][a-z0-9_-]{0,63}, empfohlen mit Plugin-Präfix (swp-grid-container). Nach der ersten Veröffentlichung nicht mehr ändern.
getFormatVersion(): intVersion deines Datenformats, ab 1. Erhöhen, sobald sich die Struktur von export() ändert.
supports(string $elementType): booltrue für die Elementtypen, um die sich der Provider kümmert.
collect(array $config, TransferContext $context): ReferenceCollectionVerweise in der Konfiguration eines Elements melden. $context->location nennt die Fundstelle (Layout, Sektion, Block, Element, Sprache).
export(ReferenceCollection $references, TransferContext $context): arrayEigene Daten für das Paket, gebaut aus allem, was collect() gemeldet hat. Das Ergebnis muss JSON-fähig sein.
plan(array $data, int $formatVersion, TransferContext $context): PlanContributionIm Zielsystem prüfen, was fehlt oder abweicht, und als Meldung zurückgeben. Keine Schreibzugriffe.
import(array $data, int $formatVersion, TransferContext $context): voidEigene Daten schreiben. Läuft in der Import-Transaktion; eine Exception rollt den gesamten Import zurück.

Gemeldete Verweise

collect() gibt eine Swp\CmsTransferSix\Reference\ReferenceCollection mit Reference-Objekten zurück:

new Reference($id, 'product', Reference::ORIGIN_PROVIDER, $location, 'teaser');
  • $id: UUID in Kleinbuchstaben ohne Bindestriche.
  • Entität: media, product, category oder product_stream, wenn bekannt; null lässt das Plugin die Entität selbst ermitteln.
  • Gemeldete Medien werden mit ins Paket gepackt und im Ziel angelegt oder wiederverwendet. Fehlende Produkte, Kategorien und Produktgruppen erscheinen in der Vorschau als Warnung mit deiner Fundstelle.
  • Für eigene Entitäten setzt du deinen eigenen Entitätsnamen. Das Plugin prüft sie nicht, übernimmt sie aber in references.json und meldet die ID nicht mehr als „unbekannter Verweis“, auch wenn der pauschale Scan sie ebenfalls findet. Die Datensätze selbst überträgst du über export()/import(); ReferenceCollection::getIds('<entität>') liefert dafür die gemeldeten IDs.

TransferContext

  • context: DAL-Context des Aufrufers. Beim Import: Live-Version, System-Scope, gleiche Transaktion wie der Layout-Import. Immer diesen Context verwenden, nie einen eigenen erzeugen.
  • stage: export, plan oder import (isExport(), isPlan(), isImport()).
  • sourceShopId: Shop-ID der Quelle.
  • languageIdsByLocale: beim Export die Sprach-IDs der Quelle, bei Vorschau und Import die Sprach-IDs des Ziels, jeweils nach ISO-Code (de-DE). getLanguageId('de-DE') liefert null, wenn die Sprache im Ziel fehlt. Ordne Übersetzungen immer über den ISO-Code zu, nie über die Sprach-ID der Quelle.
  • options: gewählte Import-Optionen (nur Vorschau und Import).
  • location: Fundstelle, nur in collect().

Meldungen in der Vorschau

plan() und Listener des Plan-Events geben eine PlanContribution zurück:

return PlanContribution::empty()
    ->withInfo('swp-grid-container', '2 Rastervorlagen werden wiederverwendet.')
    ->withWarning('swp-grid-container', 'Rastervorlage „Hero“ weicht im Zielsystem ab und wird überschrieben.', $location)
    ->withBlocker('swp-grid-container', 'Rastervorlage „Hero“ ist im Zielsystem gesperrt.');
MethodeWirkung
withInfo()Hinweis, keine Bestätigung nötig
withWarning()Warnung; der Import läuft erst, wenn der Nutzer die Warnungen bestätigt (Administration: Häkchen, Kommandozeile: --force-warnings)
withBlocker()Import nicht möglich, nicht wegbestätigbar
withMessage(PlanMessage)Meldung mit einem Standard-Code des Plugins, z. B. missing-product

Die Texte werden unverändert angezeigt, mit dem Provider-Namen davor, und auf 500 Zeichen gekürzt. Übersetze sie selbst oder schreibe sie auf Englisch.

Registrierung

Das Interface trägt #[AutoconfigureTag]. Mit autoconfigure: true genügt die Service-Definition; sonst setzt du das Tag swp_cms_transfer.reference_provider selbst:

# src/Resources/config/cms-transfer.yaml
services:
    Swp\GridContainerSix\CmsTransfer\GridContainerReferenceProvider:
        arguments:
            $templateRepository: '@swp_grid_template.repository'
        tags:
            - { name: swp_cms_transfer.reference_provider }

Optionale Abhängigkeit. Ist der Erlebniswelten Transfer nicht installiert oder nicht aktiv, existiert das Interface nicht, und eine Klasse, die es implementiert, bricht den Container-Aufbau ab. Lade die Datei deshalb nur, wenn das Interface vorhanden ist:

public function build(ContainerBuilder $container): void
{
    parent::build($container);

    if (interface_exists(CmsTransferReferenceProviderInterface::class)) {
        (new YamlFileLoader($container, new FileLocator(__DIR__ . '/Resources/config')))->load('cms-transfer.yaml');
    }
}

So bleibt dein Plugin ohne den Transfer voll lauffähig. Ein Name darf nur einmal registriert sein; doppelte oder ungültige Namen und Formatversionen unter 1 brechen den Container-Aufbau mit einer Meldung ab.

Beispiel: Grid-Container mit Vorlagen

Ein Element swp-grid-container speichert eine Vorlagen-ID (eigene Entität swp_grid_template) und je Zelle ein Bild:

{
    "template": { "source": "static", "value": "0189…" },
    "cells": { "source": "static", "value": "[{\"mediaId\":\"01a2…\"},{\"mediaId\":\"01a3…\"}]" }
}

Die Vorlagen-ID findet der pauschale Scan, kann sie aber keiner bekannten Entität zuordnen (Hinweis „unbekannter Verweis“). Die Bild-IDs stehen in einem JSON-String und bleiben unsichtbar.

final class GridContainerReferenceProvider implements CmsTransferReferenceProviderInterface
{
    private const NAME = 'swp-grid-container';

    /**
     * @param EntityRepository<GridTemplateCollection> $templateRepository
     */
    public function __construct(private readonly EntityRepository $templateRepository)
    {
    }

    public function getName(): string
    {
        return self::NAME;
    }

    public function getFormatVersion(): int
    {
        return 2;
    }

    public function supports(string $elementType): bool
    {
        return $elementType === 'swp-grid-container';
    }

    public function collect(array $config, TransferContext $context): ReferenceCollection
    {
        $references = new ReferenceCollection();
        $location = $context->location ?? new Location();

        $cells = json_decode((string) ($config['cells']['value'] ?? '[]'), true);
        foreach (\is_array($cells) ? $cells : [] as $index => $cell) {
            if (\is_array($cell) && \is_string($cell['mediaId'] ?? null) && Uuid::isValid($cell['mediaId'])) {
                $references->add(new Reference($cell['mediaId'], 'media', Reference::ORIGIN_PROVIDER, $location->withPath('cells.' . $index), 'mediaId'));
            }
        }

        $templateId = $config['template']['value'] ?? null;
        if (\is_string($templateId) && Uuid::isValid($templateId)) {
            $references->add(new Reference($templateId, self::NAME, Reference::ORIGIN_PROVIDER, $location->withPath('template'), 'template'));
        }

        return $references;
    }

    public function export(ReferenceCollection $references, TransferContext $context): array
    {
        $templateIds = $references->getIds(self::NAME);
        if ($templateIds === []) {
            return ['templates' => []];
        }

        $templates = $this->templateRepository->search(new Criteria($templateIds), $context->context)->getEntities();

        return ['templates' => array_values($templates->map(static fn (GridTemplateEntity $template): array => [
            'id' => $template->getId(),
            'name' => $template->getName(),
            'columns' => $template->getColumns(),
        ]))];
    }

    public function plan(array $data, int $formatVersion, TransferContext $context): PlanContribution
    {
        $templates = self::templates($data, $formatVersion);
        $existing = $templates === [] ? [] : $this->templateRepository->searchIds(new Criteria(array_column($templates, 'id')), $context->context)->getIds();

        return PlanContribution::empty()->withInfo(self::NAME, \sprintf(
            '%d Rastervorlage(n) neu, %d werden aktualisiert.',
            \count($templates) - \count($existing),
            \count($existing),
        ));
    }

    public function import(array $data, int $formatVersion, TransferContext $context): void
    {
        $templates = self::templates($data, $formatVersion);
        if ($templates !== []) {
            $this->templateRepository->upsert($templates, $context->context);
        }
    }

    /**
     * Format 1 had no "columns"; migrated to the current shape.
     *
     * @return list<array{id: string, name: string, columns: int}>
     */
    private static function templates(array $data, int $formatVersion): array
    {
        $templates = [];
        foreach (\is_array($data['templates'] ?? null) ? $data['templates'] : [] as $template) {
            $templates[] = [
                'id' => (string) $template['id'],
                'name' => (string) $template['name'],
                'columns' => $formatVersion === 1 ? 12 : (int) $template['columns'],
            ];
        }

        return $templates;
    }
}

Hinweise zum Beispiel:

  • export() lädt alle Vorlagen mit einer Abfrage über new Criteria($ids), import() schreibt mit einem upsert() — keine Repository-Aufrufe in Schleifen.
  • Die Vorlage behält ihre ID. Dadurch bleibt die Vorlagen-ID in der Element-Konfiguration im Ziel gültig, ohne dass sie umgeschrieben werden muss.
  • Der Provider verwendet ausschließlich $context->context.

Events für leichte Anpassungen

EventZeitpunktMöglichkeiten
Swp\CmsTransferSix\Extension\Event\CmsTransferPackageBuildEventQuelle (und Rückroll-Punkt im Ziel), nachdem alle Provider exportiert haben, bevor das Paket geschrieben wirdgetPageIds(), getDocument('pages.json') (nur lesend), getExtensions(), addExtensionData($name, $formatVersion, $data)
Swp\CmsTransferSix\Extension\Event\CmsTransferImportPlanEventZiel, nachdem Vorschau und Provider-plan() fertig sindgetPlan(), getContents() (Paketinhalt inkl. extensions), contribute(PlanContribution)
#[AsEventListener]
public function __invoke(CmsTransferImportPlanEvent $event): void
{
    if ($event->getPlan()->countByAction(PlanAction::Create) > 20) {
        $event->contribute(PlanContribution::empty()->withWarning('swp-shop-policy', 'Mehr als 20 neue Layouts in einem Transfer.'));
    }
}

Daten, die ein Listener per addExtensionData() beisteuert, landen wie Provider-Daten in extensions/<name>.json. Ein gleichnamiger Eintrag ersetzt die Daten des Providers. Importiert werden sie im Ziel nur, wenn dort ein Provider mit diesem Namen registriert ist; sonst erscheint die Warnung provider-missing. Beide Events dürfen nichts schreiben.

Formatversionen

Jeder Provider versioniert sein Datenformat unabhängig vom Paketformat. Die Version steht im Manifest (providers) und in extensions/<name>.json; das Plugin prüft beim Einlesen, dass beide übereinstimmen.

Version im PaketVerhalten im Ziel
gleich der installiertenplan()/import() mit dieser Version
älter als die installierteplan()/import() bekommen die ältere Version im Parameter $formatVersion. Der Provider muss alle älteren Versionen lesen und auf das aktuelle Format umsetzen.
neuer als die installierteDie Daten werden nicht an den Provider übergeben. Warnung provider-format-too-new („Erweiterung … liefert Datenformat 3, das Zielsystem unterstützt bis 2“). Der übrige Import läuft nach Bestätigung durch. Abhilfe: Erweiterung im Ziel aktualisieren und erneut übertragen.

Erhöhe die Formatversion bei jeder Änderung, die ein älterer Provider nicht lesen könnte. Entferne ältere Versionen nicht, solange Pakete oder Rückroll-Punkte damit existieren können.

Wenn der Provider im Ziel fehlt

Enthält ein Paket extensions/<name>.json, aber im Zielsystem ist kein Provider mit diesem Namen registriert (Plugin fehlt oder ist deaktiviert):

  • Die Vorschau zeigt die Warnung provider-missing: „Erweiterung „“ fehlt im Zielsystem; ihre Daten werden nicht übernommen.“
  • Der Import läuft nach Bestätigung der Warnungen vollständig durch: Layouts, Medien, Zuweisungen und die Daten aller vorhandenen Provider werden übernommen.
  • Die Daten des fehlenden Providers werden verworfen. Element-Konfigurationen bleiben unverändert stehen; Verweise darin zeigen auf Datensätze, die es im Ziel womöglich nicht gibt.
  • Fehlt zusätzlich der Elementtyp selbst (kein Daten-Resolver und kein Storefront-Template im Ziel), blockiert die Vorschau mit unknown-element-type.

Abhilfe: Erweiterung im Ziel installieren und aktivieren, dann erneut übertragen.

Fehlerverhalten

  • Eine Exception in collect()/export() bricht den Export ab.
  • Eine Exception in plan() bricht die Vorschau ab; der Transfer-Eintrag steht danach auf „fehlgeschlagen“ in der Phase „Vorschau“.
  • Eine Exception in import() rollt den gesamten Import zurück, auch bereits geschriebene Layouts; neu abgelegte Mediendateien werden entfernt. Der Transfer-Eintrag nennt die Phase und eine Fehlerreferenz.
  • Fange Exceptions nicht pauschal ab. Ein nicht übertragbarer Datensatz gehört als Warnung oder Blocker in plan().

Testen

Empfohlene Fälle für einen Integrationstest deines Providers:

  1. Layout mit deinem Element exportieren → extensions/<name>.json enthält deine Daten, manifest.json unter providers deine Formatversion.
  2. Layout im Ziel löschen, Paket importieren → import() hat deine Daten geschrieben, der Transfer endet erfolgreich.
  3. Paket mit Daten einer älteren Formatversion (per CmsTransferPackageBuildEvent erzeugen) → import() setzt sie korrekt um.
  4. Exception in import() → Layout und deine Daten bleiben unverändert.
  5. Rückroll-Punkt: nach dem Import zurückrollen → dein vorheriger Stand ist wiederhergestellt.

Diese Anleitung wurde für Erlebniswelten Transfer: Staging zu Live mit Vorschau und Rollback, Version 6.7.0, erstellt.

Wer betreut deinen Shop, wenn es ernst wird?

Wir pflegen Shopware-Shops seit über 20 Jahren, inklusive Updates, Hotfixes und der Plugins, die du hier gerade einrichtest.