Zum Inhalt springen
Stone & Water
Aktuelle Version

PIM für Shopware 6 - Handbuch

Diese Seite bündelt alle Funktionen des PIM-Plugins für Shopware 6 auf einen Blick. Sie ist als kompakte Referenz gedacht - für ausführliche Anleitungen mit Screenshots verweisen wir auf die detaillierten Doku-Seiten zu den einzelnen Bereichen.

Das PIM-Plugin ist kompatibel mit Shopware 6.7. Alle hier beschriebenen Funktionen stehen in dieser Version zur Verfügung.

Stand dieser Referenz: Plugin-Version 1.9.35.

Systemvoraussetzungen

Das PIM-Plugin läuft in jeder Standard-Installation von Shopware 6 ohne zusätzliche Server-Konfiguration.

  • Shopware: 6.7
  • PHP: 8.2 oder neuer
  • Datenbank: MySQL 8 oder MariaDB 10.11
  • Speicher: Standard-Empfehlung von Shopware reicht (256 MB+)
  • Berechtigungen: Shopware-Admin-Zugang als Administrator-Rolle
Hinweis: Das Plugin nutzt ausschließlich die offiziellen Shopware-Datenmodelle und APIs. Keine eigenen Datenbank-Schemas, keine Patches am Core.

Installation

Die Installation erfolgt über den Shopware Store oder per manuellem Upload.

Über den Shopware Store

  1. Im Shopware-Admin unter Erweiterungen → Store nach „PIM für Shopware" suchen.
  2. Plugin laden - es erscheint danach unter Erweiterungen → Meine Erweiterungen.
  3. Mit Klick auf Installieren installieren, anschließend Aktivieren.

Manuelle Installation

  1. ZIP-Datei aus dem Shopware Store herunterladen.
  2. Im Shopware-Admin unter Erweiterungen → Meine Erweiterungen die ZIP-Datei hochladen.
  3. Installieren und aktivieren wie oben.

Plugin aktivieren

Nach der Installation muss das Plugin aktiviert werden. Beim Aktivieren werden folgende Vorgänge ausgeführt:

  • Anlage der Plugin-Konfigurationseinträge in der Datenbank
  • Registrierung der ACL-Berechtigungen
  • Registrierung der Menüpunkte in der Shopware-Admin-Sidebar
  • Aufbau der initialen Konfigmatrix mit Defaults
Kein Cache leeren nötig: Das Plugin triggert den nötigen Cache-Refresh automatisch.

PIM aufrufen

Nach der Aktivierung erscheint der Menüpunkt PIM in der Shopware-Admin-Sidebar. Beim ersten Aufruf wird das Listing aller Produkte geladen (sichtbar gemäß Sales-Channel-Berechtigungen des angemeldeten Users).

Konfigmatrix

Die Konfigmatrix ist das zentrale Steuerungselement des Plugins. Sie liegt unter Einstellungen → System → PIM-Konfiguration und steuert:

  1. Sichtbare Felder im Listing
  2. Editierbare Felder in der Mehrfachänderung
  3. Aktive Sprachen
  4. Default-Muster für Varianten-Generator
  5. KI-Anbieter-Konfiguration
  6. Export-Einstellungen für CSV
  7. Sichtbare Felder im Quickview-Modal

Änderungen in der Konfigmatrix wirken sich sofort auf alle Nutzer aus, ohne dass diese den Browser neu laden müssen.

Sektionsreihenfolge per Drag-and-Drop

Die Reihenfolge der Sektionen in der Produkt-Detailansicht (Stammdaten, Preise, Medien, SEO, Properties, Cross-Selling, …) lässt sich per Drag-and-Drop frei festlegen. Dasselbe gilt für die Sektionen im Varianten-Detail-Modal - beide werden in eigenen Tabs der Konfigmatrix konfiguriert.

Sektionen, in denen alle Felder deaktiviert sind, werden automatisch ausgeblendet - kein leerer Akkordeon-Header mit nichts dahinter.

Brutto-/Netto-Toggles für alle Preisarten

Alle vier Preisarten lassen sich in der Konfigmatrix unabhängig für Brutto und Netto ein- und ausblenden - sowohl für Hauptartikel als auch für Varianten:

  • Verkaufspreis brutto / Verkaufspreis netto
  • Einkaufspreis brutto / Einkaufspreis netto
  • Streichpreis / UVP brutto / netto
  • Günstigster Preis 30 Tage (Omnibus) brutto / netto

Damit ist eine reine Brutto-Pflege, reine Netto-Pflege oder gemischte Anzeige möglich - passend zur Standard-Steuerlogik des Shops oder zur Vorliebe des Pflegers. Bestehende User-Konfigurationen mit den alten Einzel-Toggles bleiben über Fallback-Logik gültig - keine Migration nötig.

SEO-URL-System - zwei Generatoren mit Zusatzfeld als Brücke

Das SEO-URL-System arbeitet in zwei klar getrennten Schritten, die über ein Canonical-Zusatzfeld zusammenspielen. Der Vorteil: Die fertigen URLs kommen aus Shopwares eigener SEO-Vorlage und überstehen jede Neu-Indexierung - auch wenn Shopware den Katalog komplett neu indexiert, bleiben deine URLs erhalten.

Alternativ: Shopware-Standard-SEO-URL

Wer das Canonical-Zusatzfeld-System nicht nutzen will, kann in der Konfigmatrix die Option „Shopware Standard SEO-URL" aktivieren (getrennt steuerbar für Produktdetail, Varianten-Modal und Quickview). Ist sie aktiv:

  • zeigt das Feld die native Shopware-SEO-URL statt des StawPim-Canonical-Felds; die Canonical-Optionen werden ausgeblendet, die Hauptkategorie bleibt sichtbar
  • ist das Standard-SEO-URL-Feld in Stammdaten, Varianten-Modal und Quickview direkt editierbar - es lädt die bestehende URL (auch ohne Verkaufskanal-Bindung) und schreibt per PATCH in seo_url, ohne Duplikate zu erzeugen
  • bleiben bestehende Pattern-Shops unverändert (abwärtskompatibel, explizite Defaults)
Wann was? Das Zwei-Generator-System (unten) ist die Wahl für regelbasierte, reindex-feste URLs über viele Produkte. Der Standard-Modus ist ideal, wenn du die native Shopware-SEO-URL einfach direkt im PIM bearbeiten willst.

Schritt 1 - „URL im Zusatzfeld generieren" (Token → Feld)

Ein Token-Pattern (z.B. {mainCategoryPath}/{name}) wird variant- und sprachgenau aufgelöst und in das Pro-Shop-Zusatzfeld staw_pim_canonical_<shop> geschrieben. Verfügbar auf zwei Wegen:

  • Bulk-Lauf: Button im SEO-Tab öffnet das Modal mit Kanal-/Sprachauswahl (gruppiert nach Shop, Akkordeons, „Alle (ab)wählen" je Gruppe) und Fortschrittsanzeige
  • Pro-Produkt: Button „Aus Pattern generieren" direkt in Stammdaten und Varianten - füllt das Eingabefeld, danach normal speichern

Verfügbare Tokens als anklickbare Chips: {name}, {productNumber}, {manufacturer}, {category}, {categoryPath}, {mainCategory}, {mainCategoryPath}, {options}, {properties}, {tags}, {ean}, {metaTitle} sowie Custom-Field-Tokens. Das „Feld-Pattern" ist ein eigenes Eingabefeld, getrennt vom Twig-URL-Pattern von Schritt 2.

{metaTitle} als Quelle: Der am Produkt gepflegte Meta-Title kann als Quell-Variable im Feld-Pattern, in der Admin-Vorschau und in den KI-Text-Templates verwendet werden - aufgelöst mit Sprach-Fallback, Varianten erben vom Hauptartikel.

Optionales Meta-Title-Pattern

Neben dem Feld-Pattern (Schritt 1) lässt sich optional ein Meta-Title-Pattern konfigurieren. Beim Generieren wird der Meta-Title in Klartext aufgelöst - keine Slugifizierung, Umlaute und Groß-/Kleinschreibung bleiben erhalten, Breadcrumbs werden mit „ / " verbunden - und im selben Lauf pro Sprache in den Produkt-Meta-Title geschrieben. Berücksichtigt „nur leere", kürzt bei 255 Zeichen, und die Ergebnis-Zusammenfassung zeigt die Anzahl geschriebener Meta-Titles. Die Variablen-Chips stehen auch unter dem Meta-Title-Feld zur Verfügung.

Schritt 2 - „SEO URLs generieren" (Twig → Datenbank)

Ein Twig-Pattern liest die Zusatzfelder und wird als Shopwares native SEO-URL-Vorlage (seo_url_template) je Verkaufskanal gesetzt. Die Neuindexierung läuft über Shopwares eigenen SeoUrlGenerator - Shopware erzeugt die URLs selbst aus dem Zusatzfeld. Typisches Pattern für Migrationen:

{% if staw_url_product_detail %}{{ staw_url_product_detail|raw }}{% else %}{{ product.customFields.staw_pim_canonical_shop|raw }}{% endif %}

Migrierte Produkte behalten so ihre bestehende URL, neue Produkte nutzen das von Schritt 1 gefüllte Feld. Geänderte Pfade bleiben als 301-Weiterleitung erhalten - kein SEO-Verlust, kein 404 für bestehende Links.

Migriertes Feld sprachgenau: Das migrierte Feld wird strikt in der aktuellen Sprache geprüft, ohne Shopwares Übersetzungs-Vererbung - Werte aus einer anderen Sprache gewinnen nicht.

Pattern-Editor mit Textarea, Stift und Twig-Syntax-Check

Das Pattern-Eingabefeld ist eine Textarea mit Auto-Höhe - bei langen Patterns mit {% if %}-Abfrage ist die ganze Logik sichtbar. Pro Pattern:

  • Stift-Icon zum Bearbeiten - öffnet einen großen Editor mit Variablen-Chips
  • Variablen-Chips kontextabhängig: Token-Chips für Schritt 1, offizielle Shopware-SEO-Twig-Variablen (Produktdetailseite) für Schritt 2. Felder werden direkt mit |raw eingefügt
  • Live-Twig-Syntax-Check: Ungültiges Twig wird rot gemeldet, Speichern ist gesperrt
  • Mix-Warnung: Wenn {tokens} und Twig ({% %}/{{ }}) im selben Pattern stehen, warnt der Editor - das funktioniert nicht, da Shopware die Twig-Ausgabe slugifiziert und Token-Klammern entfernt. Empfehlung: reines Twig oder reines Token-Pattern

Eigenes Pattern pro Shop - für beide Generatoren

Der Pro-Verkaufskanal-Pattern-Editor ist für beide Generatoren verfügbar: Schritt 1 kann ein eigenes Token-Pattern je Verkaufskanal erhalten, Schritt 2 ein eigenes Twig-Pattern. Shop-Patterns sind eine Liste: Jeder Shop mit eigenem Pattern wird mit Name + Pattern angezeigt - per Stift bearbeiten oder Papierkorb entfernen. „Pattern für Shop hinzufügen" öffnet das Editor-Modal mit Kanal-Auswahl. Shops ohne eigenes Pattern verwenden das Standard-Pattern.

Das Generierungs-Modal

Beide Generatoren öffnen ein geführtes Modal (im PIM-CI mit Indigo-Akzenten):

  1. Verkaufskanal + Sprachen wählen - alle aktiven Kanäle, nach Shop gruppiert als Karten mit Sprach-Akkordeons darunter (initial zugeklappt, nichts vorausgewählt). Je Gruppe „Alle (ab)wählen" mit Zähler, plus globaler „Alle auswählen"-Button. Pro Kanal Badges: Anzahl Produkte (nur tatsächlich im Kanal sichtbare, inkl. Varianten) und Anzahl ohne SEO-URL.
  2. Optionen:
    • „Alte URLs als 301 behalten" - geänderte Pfade bleiben als Redirect erhalten
    • „Nur fehlende SEO-URLs erzeugen" - bestehende/migrierte URLs bleiben unangetastet
    • „Alle Produkt-URLs entfernen (Reset)" - löscht alle SEO-URLs der gewählten Kanäle/Sprachen (inkl. Shopwares globaler Detail-URLs der Sprache) und baut frisch auf. Die anderen Optionen springen sichtbar auf AUS
  3. Vorschau - wählt Beispielprodukte, die im Kanal sichtbar sind und deren Pattern auflöst; bis zu drei echte Beispiel-URLs, lange URLs werden umbrochen, Box scrollbar.
  4. Probelauf oder Generierung - der Probelauf zeigt den kompletten Lauf ohne zu schreiben. Ergebniskarten farbcodiert: Neu = grün, Änderung = blau, Übersprungen = grau, Warnung = amber, Fehler = rot.

Der Fortschrittsbalken zeigt Prozentanzeige mit Indigo-Verlauf. Die Generierung läuft chunked - auch zehntausende Produkte ohne Timeout.

Ergebnisbericht und Konflikte

  • Geschrieben / Übersprungen / Redirects als Zähler
  • „N ohne gerenderten Pfad" - Produkte, deren Pattern nichts ausgibt (z.B. Migrations-Feld und Canonical-Feld beide leer). So ist sofort sichtbar, warum nichts geschrieben wurde
  • Konflikte mit Produktnummern statt internen IDs. Pfade, die bereits von einer anderen Route belegt sind (z.B. Kategorie mit gleichem Slug), werden sauber übersprungen und als „Pfad bereits anderweitig vergeben" gemeldet - kein Duplicate-Key-Abbruch
Wichtig: Die gleiche URL in verschiedenen Shops ist kein Konflikt - Eindeutigkeit gilt pro Shop + Sprache. Lösung bei echten Konflikten: Pattern eindeutiger machen, z.B. {mainCategoryPath}/{name}-{options}.

Slug-Behandlung: Umlaute, Schrägstriche, Punkte

  • Umlaute und Sonderzeichen (auch in statischem Pattern-Text wie einem wörtlichen „für/") werden konvertiert: ä→ae, ö→oe, ü→ue, ß→ss; „&" und Leerzeichen werden zum Trennzeichen
  • Schrägstriche und Punkte bleiben erhalten - Kategorienamen mit „/" und Artikelnummern/Namen mit „." (z.B. .html-Suffixe) laufen unverändert durch
  • Twig |raw automatisch: Shopwares SEO-Umgebung slugifiziert jede Twig-Ausgabe (inkl. Schrägstriche → „-"). Nackte Ausgaben von Pfad-Feldern bekommen in allen Generierungspfaden automatisch |raw injiziert
  • Vorschau und Server-Generierung verhalten sich identisch - was die Vorschau zeigt, wird auch geschrieben
  • Sicherheitsnetz: Leeres Canonical-Feld → Fallback auf den Produktnamen statt leerem Pfad

Sprach-Fallback bei mehrsprachigen Shops

Bei der Generierung werden durchgängig die kanal-/sprachspezifischen Werte verwendet (Name, Hersteller, Kategorie, Varianten-Optionen). Fallback-Kette: angefragte Sprache → Eltern-Sprache → System; leere oder geerbte Übersetzungen werden übersprungen. Gilt für Token- und Twig-Generierung - keine versehentliche Standardsprache in fremdsprachigen URLs.

Varianten: eindeutige URLs

Beide Generatoren verarbeiten Parent und Varianten. Geerbte Felder werden aus dem Parent aufgelöst (inkl. übersetzter customFields mit Vererbung). Die Tokens {options}, {properties} und {tags} liefern sprachübersetzte Werte - ein Pattern wie {mainCategoryPath}/{name}-{options} erzeugt pro Variante und Sprache eine eindeutige URL, keine doppelten Pfade zwischen Varianten desselben Parents.

Kategorie-Pfad deterministisch

{mainCategoryPath}/{categoryPath} nutzen die Hauptkategorie des jeweiligen Verkaufskanals. Ist keine gesetzt, bevorzugt der Fallback die tiefste zugewiesene Kategorie (längster Pfad) - deterministisch statt beliebig. Bei leerer category.path-Spalte (Indexer-Rückstand nach Importen) wird die Ahnenkette über parent_id rekonstruiert.

UX-Hinweis: Die SEO-Akkordeons (URL Pattern, Optionen, SEO URLs generieren) starten standardmäßig eingeklappt. Reload auf …/config/seourl öffnet wieder den SEO-Tab.

Standard-Steuersatz für neue Produkte

Beim Anlegen eines neuen Produkts wird automatisch der erste Steuersatz aus dem Shopware-System vorausgewählt (sortiert nach position ASC). Sowohl taxId als auch taxRate werden gesetzt, sodass die Brutto/Netto-Berechnung sofort funktioniert.

Validation-Modal mit Scroll-to-Section

Klick auf Speichern während Pflichtfelder leer sind: statt einer Warn-Banner-Wand öffnet sich ein Modal mit allen Fehlern. Klick auf einen Fehler springt direkt zur betroffenen Sektion - sie wird aufgeklappt, das Feld wird mit einer indigo Outline für rund 2,5 Sekunden hervorgehoben.

Berechtigungen (ACL)

Das Plugin registriert eine eigene Rechtegruppe „StawPim (Produkte)" im Shopware-ACL-System. Zu finden unter:

Einstellungen → Benutzer & Berechtigungen → Rollen → eine Rolle wählen oder anlegen → Gruppe „Kataloge" → „StawPim (Produkte)"

Vier Rollen pro Benutzer-Rolle

  • staw_pim.viewer - Ansehen: PIM-Bereich aufrufen, Produkte listen, Konfigurationsmatrix sehen. Voraussetzung für alle anderen Rollen.
  • staw_pim.editor - Bearbeiten: Inline-Edit, Mehrfachänderung, Quickview-Modal, KI-Textgenerierung. Setzt viewer voraus.
  • staw_pim.creator - Anlegen: Neue Produkte anlegen, CSV-Import, Varianten-Generator. Setzt viewer + editor voraus.
  • staw_pim.deleter - Löschen: Produkte löschen. Setzt viewer voraus.

Rollenbasierte Menü-Sichtbarkeit

Ohne Recht „StawPim: Ansehen" sind die Menüpunkte nicht sichtbar - Dashboard, Produkte und Konfigurationsmatrix erscheinen für nicht berechtigte Nutzer gar nicht erst. Auch die automatische Weiterleitung von der Shopware-Standard-Produktliste auf die PIM-Liste respektiert das Recht.

Feed-Generator separat freigebbar

Im Superadmin-Bereich „Funktionen für normale Benutzer" gibt es einen eigenen Schalter „Feed-Generator" - damit lässt sich der Feed-Generator-Button (in der Produktliste) für Nicht-Superadmin-Benutzer gezielt an-/abschalten, unabhängig von CSV-Import/Export. Standard: aktiv. Superadmins sehen den Button immer.

Weitere Feature-Schalter

Neben dem Feed-Generator lassen sich einzelne Funktionen gezielt für normale Benutzer ein-/ausblenden:

  • „Produkte duplizieren" - getrennt von „Produkte erstellen". Deaktiviert blendet den Duplizieren-Eintrag im Kontextmenü aus.
  • „Varianten generieren (Mehrfachänderung)" - deaktiviert blendet den Varianten-Generieren-Tab in der Mehrfachänderung aus.
  • „Kategorien verwalten" - eigene Berechtigung für die Kategorien-Verwaltung (Button „Kategorien").
  • „Auf Varianten übertragen" - steuert die drei Schaltflächen zum Übertragen von Bildern und Eigenschaften des Stammartikels auf dessen Varianten (Bilder & Medien, Reiter Eigenschaften, Zuweisungsdialog). Ausgeschaltet sehen nur Superadmins diese Schaltflächen.

Das Anlegen neuer Produkte lässt sich weiterhin über die bestehende Rolle „Anlegen" (staw_pim.creator) abschalten.

Nach dem Update: Nicht-Admin-Nutzer müssen das neue Recht „StawPim: Ansehen" in ihrer Rolle einmalig zugewiesen bekommen. Vorher war der Zugriff über generische Produkt-Rechte (product.viewer etc.) implizit gewährt - jetzt ist es explizit. Admin-Rollen sehen wie bisher alles.
Underlying Shopware-Rechte: Die viewer-Rolle grants intern product.viewer, custom_field_set:read, sales_channel:read, language:read, product_stream:read, tag:read, delivery_time:read, unit:read, tax:read. editor grants product.editor, creator grants product.creator, deleter grants product.deleter - alles über die offizielle Shopware-Privilege-API.

CSV-Import-Tab

Zusätzliche Beschränkung: Aus Sicherheitsgründen ist der Import-Tab im CSV-Modal zusätzlich auf Superadmins beschränkt - auch wenn die Rolle creator hat. Grund: CSV-Import kann den Katalog massiv verändern und sollte nur durch erfahrene Admin-User erfolgen.

Sprachen

Das PIM unterstützt alle in Shopware angelegten Sprachen. Sichtbar und editierbar werden Sprachen, die in der Konfigmatrix als aktiv markiert sind. Pro Sprache wird ein eigener Tab im Detail-Editor angeboten.

Aus Standardsprache übernehmen

Legt ein Verkaufskanal eine eigene Sprache an, sind dort zunächst keine eigenen Texte hinterlegt. Im Shop erscheinen zwar die geerbten Inhalte, eine gezielte Pflege oder KI-Überarbeitung je Sprache ist ohne eigenen Ausgangstext aber nicht möglich. Für diesen Fall gibt es an zwei Stellen die Funktion „Aus Standardsprache übernehmen".

  • Produkte: Mehrfachänderung → Bereich KI & Texte. Übertragen werden Name, Beschreibung, Meta-Titel, Meta-Description und Keywords; Felder und Zielsprachen sind frei wählbar.
  • Kategorien: Sammelaktion im Kategorien-Modal. Der Dialog nennt vorab Anzahl, Zielsprache und Felder, zeigt während der Übernahme einen Fortschrittsbalken und aktualisiert die Ansicht danach automatisch. Die Schaltfläche erscheint nur, wenn die gewählte Sprache von der Standardsprache abweicht.
  • Vorhandenes bleibt stehen: Standardmäßig werden nur leere Felder gefüllt. Das Überschreiben lässt sich bei den Produkten optional aktivieren; bei den Kategorien werden eigene Texte immer übersprungen und am Ende ausgewiesen.
  • Sauber geprüft: Ob eine Zielsprache bereits eigene Texte hat, wird anhand der Übersetzungssätze ermittelt - nicht anhand der geerbten Anzeigewerte.
Typischer Ablauf: Erst „Aus Standardsprache übernehmen", dann die KI-Textgenerierung in der Zielsprache laufen lassen. So hat die KI einen Ausgangstext und schreibt nicht ins Leere.

Aufbau des Listings

Das zentrale Produktlisting ist die Hauptansicht des PIM mit folgenden Elementen:

  • Filter-Bar oben - beliebig viele Filter-Bedingungen mit UND/ODER-Verknüpfung
  • Spalten-Header - sortierbar, breitenanpassbar, ein-/ausblendbar
  • Datenzeilen - pro Produkt eine Zeile, mit Variantenartikel-Aufklappen on-demand
  • Footer-Toolbar - Auswahl-Anzahl, Bulk-Aktionen, Export/Import-Buttons
  • Bottom-Save-Bar - erscheint bei aktiven Inline-Änderungen mit Speichern/Verwerfen

Filter mit UND/ODER

Filter-Bedingungen können beliebig kombiniert werden:

  • 9 Vergleichsmodi pro Feld: enthält, enthält nicht, ist gleich, ist nicht gleich, beginnt mit, endet mit, ist leer, ist nicht leer, ist in Liste
  • UND/ODER-Logik zwischen Filter-Bedingungen - auch verschachtelt
  • Variantenartikel-aware - Filter berücksichtigen Hauptartikel und Varianten
  • Verfügbar für alle Felder inkl. Custom Fields und mehrsprachiger Felder
  • „Übersetzung fehlt" - in den Varianten Name fehlt, Beschreibung fehlt und Beides fehlt. Die Treffer werden serverseitig gegen genau die gewählte Sprache ermittelt und auf Stammartikel eingegrenzt; leere Texte zählen wie fehlende. Ohne ausdrückliche Sprachwahl gilt die aktive Sprache. Der Filter-Chip nennt die geprüfte Sprache mit, zum Beispiel „Übersetzung: Name fehlt (Alpendampf DE)".
  • Sprachvererbung: Liegt ein Text nur bei der übergeordneten Sprache, greift er im Shop - Filter und Vollständigkeit prüfen deshalb die gesamte Sprachkette. Produkte ohne jede Übersetzung in der Kette werden weiterhin zuverlässig gefunden.
  • Vollständigkeit folgt dem Verkaufskanal: Die übersetzbaren Felder werden gegen die Sprache des gewählten Kanals gerechnet; ohne Kanalauswahl gegen die Systemsprache.
  • UVP-Status („UVP fehlt", „UVP kleiner als Brutto") wird serverseitig über den gesamten Bestand ermittelt, sodass Trefferzahl, Blätterung und Ergebnis zusammenpassen.

Kategoriefilter

Neben den frei kombinierbaren Bedingungen filtert ein eigener Baum über die Kategorien. Er stellt den Katalog in beliebiger Tiefe dar; auch fünf, sechs oder mehr Ebenen lassen sich aufklappen und auswählen.

  • Untergeordnete werden mitgewählt - hakst du eine Kategorie an, sind alle darunter liegenden ebenfalls ausgewählt; beim Abwählen verschwinden sie wieder
  • Beliebige Tiefe - der Baum ruft sich selbst auf und endet nicht mehr nach vier Ebenen
  • Der Filter wirkt zusammen mit allen übrigen Bedingungen

Das Mitwählen der untergeordneten Kategorien ist der praktisch entscheidende Teil: Produkte hängen meist an der untersten Ebene, sodass die Auswahl einer Oberkategorie allein nichts gefunden hätte.

Zusammenspiel der Filter

Alle gesetzten Filter wirken gemeinsam und schränken die Treffermenge ein - Verkaufskanal, Kategorien, Vollständigkeit, eigene Bedingungen, Warengruppen, Preisspanne, Bilder, Beschreibung, Sichtbarkeit, UVP, Eigenschaften, Lieferzeit und Varianten-Bilder.

  • Varianten werden mitgesucht - ist ein eigener Filter gesetzt, sucht das Plugin zusätzlich in den Varianten und holt deren Stammartikel in die Liste, damit ein Treffer nicht übersehen wird
  • Verneinende Bedingungen wie „enthält nicht" oder „ist nicht" wirken bewusst nur auf den Stammartikel - sonst würde eine einzige passende Variante genügen, um einen widersprechenden Artikel hereinzuholen
  • Leere Felder zählen bei verneinenden Bedingungen als Treffer, denn ein leeres Feld enthält den gesuchten Text gerade nicht
Zur Diagnose: Nach dem Laden steht die tatsächlich gesendete Abfrage in der Browser-Konsole unter window.stawPimLastCriteria. Damit ist bei mehreren gleichzeitig gesetzten Filtern nachvollziehbar, welche Bedingungen wirklich ankommen.

Spalten konfigurieren

Sichtbare Spalten lassen sich pro User individuell konfigurieren - Hinzufügen über Plus-Icon oben rechts, Reihenfolge per Drag-and-Drop, Breite per Drag am Spalten-Rand, Sortierung per Klick auf den Spaltenkopf. Alle Einstellungen werden pro User gespeichert.

Eigene Spalten anlegen

Über den Button „Eigene Spalte" (oben rechts in der Spalten-Konfiguration) öffnet sich ein Dialog, in dem du eine zusätzliche Spalte mit eigenem Namen und einem Quellfeld definierst:

  • Quellfeld: entweder ein Stammdatenfeld (Erscheinungsdatum, Bestand, Maße, weitere Datumsfelder, …) oder ein beliebiges Zusatzfeld (Custom Field). Die Auswahl ist ein durchsuchbares Dropdown mit Gruppen-Überschriften (Stammdaten / Zusatzfelder) - lange Zusatzfeld-Listen filterst du per Tippen.
  • Sortierbar machen: Ein Schalter im Dialog erlaubt das Sortieren der Liste über diese Spalte (Klick auf den Spaltenkopf). Sortiert wird über den DAL-Pfad des Feldes (Stammdatenfeld oder customFields.<name>).
  • Automatische Formatierung: Werte werden passend dargestellt - Datum im deutschen Format, Ja/Nein bei Boolean-Feldern.

Neue Spalten erscheinen in der Spaltenliste, lassen sich über die Pfeile einordnen, wieder entfernen und werden persistent in der Konfiguration gespeichert.

Robustes Sortieren: Das Sortierfeld der Liste wird gegen eine Whitelist geprüft - ein ungültiger oder veralteter Sortierwert (z.B. eine inzwischen entfernte eigene Spalte) fällt automatisch auf „Name" zurück, statt einen 400-Fehler auszulösen.

Filter- und Spalten-Presets

Häufig genutzte Konfigurationen können als Preset gespeichert werden - eigene, geteilte und System-Presets.

Inline-Bearbeitung

Direkt im Listing können Felder per Klick editiert werden. Bestand, Preis, EAN, Herstellernummer, Gewicht sowie der Aktiv-Toggle sind inline editierbar - auch für Varianten. Nach dem Speichern wird der Wert verifiziert (Read-back). Wenn Shopware den Wert verwirft - z.B. wegen Vererbungslogik bei Varianten - erscheint ein Warnhinweis statt fälschlich Erfolg.

Unterstützte Eingaben: Text-Felder, Zahlenfelder mit Locale-bewusster Trennung, Toggle-Slider, Dropdown mit Suche, Multi-Select-Chips, native Date-Picker.

Tastenkürzel: Enter bestätigt, Esc bricht ab, Tab springt zum nächsten Feld.

Quickview-Modal

Direkt aus dem Listing kann pro Produkt ein Quickview-Modal geöffnet werden - über das Quickview-Icon in der Zeile. Es zeigt die wichtigsten Stammdaten kompakt zur direkten Bearbeitung, ohne Wechsel in die volle Detailansicht.

Inhalte des Modals:

  • Artikel-Basisdaten: Artikelnummer, Name, EAN, MPN, Aktiv-Status
  • Preise: Brutto/Netto, Einkaufspreis (brutto + netto), Omnibus-Preis (regulationPrice)
  • Bestand & Versand: Bestand, Wiederauffüllzeit, Closeout-Toggle, Versandkostenfrei
  • Bestellmengen: Min/Max/Schrittweite
  • Beschreibung als Textarea
  • SEO: Meta-Title, Meta-Description, Suchbegriffe

Header-Layout

Der Modal-Header zeigt den Variantennamen vorne (groß und dunkel), die Artikelnummer als sekundäre Information dahinter (klein, grau) - analog zur Stammartikel-Variantenmaske. So ist bei Variantenpflege auf den ersten Blick klar, welche Variante gerade bearbeitet wird.

Einheitliche Eingabefelder

Alle Eingabefelder im Quickview folgen der gleichen Struktur: Label oben, Eingabefeld darunter (42 px Höhe) - konsistent zum Rest des Plugins. Das gilt für Text-Felder, Zahlen-Felder, Selects und Toggles.

Alles ausklappen / Alles einklappen

Im Modal-Header gibt es einen Button Alles ausklappen bzw. Alles einklappen - analog zur Detailansicht der Stammdaten. Damit lassen sich alle Akkordeons in einem Schritt öffnen oder schließen.

Welche Felder im Quickview sichtbar sind, steuerst du in der Konfigurationsmatrix unter „Quickview" - pro Sektion. Sektionen ohne aktivierte Felder werden automatisch ausgeblendet.

Variantenanzeige

Variantsartikel werden im Listing als Hauptartikel-Zeile dargestellt. Per Klick auf das Plus-Icon werden die Varianten inline darunter aufgeklappt, ohne Page-Wechsel.

Kompakte Variantenansicht: In der Konfigmatrix unter Allgemein → Produktliste lässt sich die Option „Kompakte Variantenansicht" aktivieren. Varianten werden dann platzsparend dargestellt - ohne große Einrückung, ohne Vorschaubild und mit deutlich flacheren Zeilen; der Varianten-Marker (└) sitzt mittig. Inhalte (Name + Optionen) bleiben vollständig erhalten, auch bei sehr langen Variantennamen (die Zeilen wachsen bei Bedarf mit, ohne Überlappung). Nach dem Umstellen in der Konfigmatrix „Speichern" klicken.

Bild-Upload per Drag & Drop

In den Stammdaten und in der Varianten-Ansicht gibt es in der Sektion „Bilder/Medien" eine Drag-&-Drop-Zone (unterhalb der Bilder). Dateien ablegen oder per Klick den Datei-Dialog öffnen - beides funktioniert, mit Fortschrittsanzeige.

  • Uploads landen in der Shopware-Mediathek (Produkt-Ordner) und werden sofort dem Produkt zugeordnet
  • Das erste Bild wird automatisch Titelbild, falls noch keins gesetzt ist
  • Varianten: Ein hochgeladenes Bild wird zum eigenen Bild der Variante und überschreibt das geerbte. Entfernt man das eigene Bild, werden wieder die Bilder des Hauptprodukts geerbt - beides bleibt jederzeit möglich

Freigabe-Workflow - Status „In Bearbeitung"

Zusätzlich zu Freigeben/Ablehnen/Einreichen gibt es den Status „In Bearbeitung", den Bearbeiter selbst an einem Produkt setzen können - als Signal an das Team, dass gerade jemand daran arbeitet. Der Status ist überall berücksichtigt:

  • Detailansicht: Status-Badge + Button zum Setzen
  • Produktliste: Filter und Status-Indikator (Indigo)
  • Einstellungen: Freigabe-Statistik zählt „In Bearbeitung" mit

Kategorie-Zuweisung mit Chips

Zugewiesene Kategorien werden als entfernbare Chips unter dem Kategoriebaum aufgelistet (kleines × zum Entfernen). So ist auf einen Blick ersichtlich, welche Kategorien ausgewählt sind - ohne im Baum suchen zu müssen.

Produkt anlegen - geführtes Modal

Der Button „Produkt anlegen" öffnet ein Modal, das vor dem Anlegen die Grundlagen abfragt - statt ein leeres, kategorieloses Produkt direkt in den Katalog zu schreiben. So entstehen keine unsichtbaren Karteileichen mehr.

Das Modal ist bewusst auf das Wesentliche reduziert: Name, Artikelnummer (aus dem Nummernkreis reserviert, editierbar) und Verkaufskanal-Sichtbarkeit (vorausgewählt), untereinander dargestellt. Preis (0), Standard-Steuersatz und der Inaktiv-Status werden still als Defaults gesetzt - diese und die Kategorien pflegst du anschließend auf der Detailseite, die direkt nach dem Anlegen geöffnet wird.

Die Eingabefelder folgen dem PIM-CI (1,5px-Ränder, 8px-Radius, Indigo-Fokusring, einheitliche Höhe), inklusive der Steuersatz-Auswahl.

Duplizieren: Beim Duplizieren eines Produkts vergibt das PIM die nächste freie Artikelnummer aus dem Shopware-Nummernkreis (wie beim manuellen Anlegen) statt ein -Copy-Suffix anzuhängen; der Name erhält den Zusatz „(Kopie)". Varianten der Kopie bekommen ihre Nummer als <neue Nummer>.<Index> (Shopware-Varianten-Konvention). Fällt der Nummernkreis aus, greift der -Copy-Suffix als Fallback.

Erscheinungsdatum

Das Erscheinungsdatum (Shopwares releaseDate) heißt im gesamten PIM einheitlich so - auf der Detailseite, in der Konfigmatrix, der Mehrfachänderung, im Feed-Generator, im CSV und in der Varianten-Schnellpflege. (Frühere Versionen nutzten einen Mix aus „Erscheinungsdatum", „Freigabedatum" und „Veröffentlichungsdatum".)

  • Detailseite: Das Feld sitzt im Abschnitt „Lieferbarkeit" (nicht mehr unter „Sichtbarkeit"). Der Abschnitt öffnet sich auch, wenn nur das Erscheinungsdatum-Feld aktiviert ist.
  • Varianten: Pro Variante setzbar - sowohl in der Varianten-Schnellpflege als auch im Varianten-Detail-Modal, jeweils im Lieferbarkeits-Abschnitt. Leer erbt vom Hauptartikel (ausgegraut dargestellt wie die übrigen vererbbaren Felder). In der Feld-Matrix „Varianten Lieferbarkeit" ein-/ausblendbar (Default an).
  • Anzeige & Speicherung: Der Datepicker zeigt das Datum im deutschen Format (TT.MM.JJJJ) ohne Uhrzeit, speichert intern aber weiterhin den vollständigen Datetime-Wert (Shopware-Standard).
Hinweis zum Import: Eine alte availableAt-/„Verfügbar ab"-Spalte aus früheren Exporten wird beim CSV-Import aus Kompatibilitätsgründen weiterhin auf das Erscheinungsdatum gemappt - aber nur, wenn das Erscheinungsdatum selbst leer ist. Das frühere separate Feld „Verfügbar ab" gibt es nicht mehr (es wurde nie gespeichert, da die Produkt-Entität diese Spalte nicht hat).

Kategorien-Verwaltung

Ein Button „Kategorien" (links neben dem Feed-Generator) öffnet ein Modal zur kompletten Kategorie-Verwaltung - kein Wechsel in den Shopware-Standard nötig.

  • Baum je Verkaufskanal: Die Verkaufskanal-/Sprach-Auswahl nutzt den Channel-Bar im Stammdaten-Stil (mit Icons und Feld-Rahmen). Pro Kanal wird der Baum ab der Navigations-Wurzel aufgebaut, die Einstiegs-/Wurzelkategorie steht oben. Geladen wird direkt über das category-Repository (kein separater API-Endpoint).
  • Anlegen, bearbeiten, löschen: Kategorien lassen sich anlegen, umbenennen, aktivieren/deaktivieren und löschen. Neue Kategorien werden in der Systemsprache angelegt. Ein Button „Neue Kategorie" in der Leiste legt schnell eine Wurzelkategorie im gewählten Kanal an. Die Lösch-Bestätigung ist ein Dialog im PIM-CI-Stil (kein Browser-Confirm).
  • Felder je Sprache: Name, Beschreibung und SEO-Felder werden pro Sprache gepflegt; ein Sprachwechsel lädt Baum und Detail neu, sodass übersetzte Felder erscheinen. Die Beschreibung ist ein WYSIWYG-Editor (sw-text-editor) mit sichtbarer HTML-Formatierung.
  • Typ, Layout & mehr: Übergeordnete Kategorie und Typ setzen, ein Layout (CMS-Erlebniswelt) zuweisen (inkl. Button „Neue Erlebniswelt anlegen", öffnet den CMS-Editor in neuem Tab), externer Link bei Link-Kategorien, Schalter „In Hauptnavigation anzeigen", Zusatzfelder-Abschnitt. Per Drag & Drop lassen sich Kategorien unter einen anderen Übergeordneten verschieben.
  • KI-Texte für Kategorien: Ein Button „KI-Texte" öffnet ein Panel zum Generieren von Beschreibung, Meta-Title, Meta-Description und Keywords - über alle vier Anbieter, mit Tonalitätswahl, Ausgabe in der aktiven Sprache und freiem Feld „Weitere Anweisungen an die KI". Ein Schalter „Unterkategorien einbeziehen" generiert für den gesamten Unterbaum, ein Schalter „Bestehende Texte überschreiben" entscheidet, ob nur leere Felder gefüllt oder vorhandene ersetzt werden. Daneben steht „Übersetzen" einzeln zur Verfügung (DeepL oder KI-Anbieter, Quell- → Zielsprache).
  • Kategoriebild & Alt-Text: In den Stammdaten ein Cover-Bild aus der Mediathek wählen oder hochladen (gespeichert als category.mediaId), plus sprachabhängiger Alt-Text für Barrierefreiheit/SEO.
  • SEO-URL (Slug): Je Verkaufskanal und Sprache ein eigener Slug; die alte URL bleibt als 301-Weiterleitung erhalten, die neue wird Canonical und überlebt den Reindex. Leeres Feld setzt auf Shopware-Automatik zurück.
  • Produktzuordnung: Pro Kategorie eine Dynamische Produktgruppe (Stream) oder ein StawPim-Preset-Filter (mit Live-Trefferanzahl; beim Speichern werden die Produkte fest zugewiesen).
  • Vollständigkeits-Score & Bulk: Jede Kategorie zeigt einen Prozent-Score (Beschreibung, Meta, Bild); ein Vollständigkeits-Filter neben der Suche. Mehrfachauswahl per Checkbox für „Aktiv/Inaktiv" und „In Nav anzeigen/ausblenden" mit Snapshot/„Verlauf" und Audit-Log.
  • Standard-Sortierung & Duplizieren: Pro Kategorie eine Shopware-Sortierung setzen; eine Kategorie inkl. Unterbaum als „(Kopie)" duplizieren.
  • Import/Export: Kompletter Baum als mehrsprachige CSV (Spalten feld.locale, Zusatzfelder als cf.-Spalten) oder als JSON-Backup; Import löst Eltern über parentPath auf, mit Vorschau, Validierung und Sicherung.
Berechtigung: Die Kategorien-Verwaltung ist über die eigene Berechtigung „Kategorien verwalten" abgesichert. Die Detail-Abschnitte (Stammdaten, Layout, Beschreibung & SEO, Zusatzfelder) sind beim Öffnen standardmäßig eingeklappt. Alle Details in der ausführlichen Kategorien-Anleitung.

Sprachen im Kategoriebaum

  • Vollständigkeit je Sprache: Der Prozentwert je Kategorie zählt nur die eigenen Texte der gewählten Sprache - passend zum Bearbeitungsformular daneben, in dem ebenfalls je Sprache gepflegt wird. Geerbte Inhalte fließen nicht mit ein.
  • Baum folgt der Kanalsprache: Beim Öffnen wird der Baum in der Sprache des zuerst gewählten Verkaufskanals aufgebaut, sodass Namen und Prozentwerte links zur Sprachanzeige oben passen.
  • Sofort sichtbare Änderungen: Nach Sammelaktionen (aktiv/inaktiv, Navigation ein-/ausblenden, Rückgängig) und nach einem Import wird neben dem Baum auch die Bearbeitungsansicht rechts aktualisiert.

Mehrfachänderung - Übersicht

Die Mehrfachänderung ermöglicht es, in einem Vorgang Felder bei beliebig vielen ausgewählten Produkten gleichzeitig zu ändern.

Ablauf

  1. Produkte im Listing auswählen
  2. Klick auf Mehrfachänderung in der Footer-Toolbar
  3. Dialog öffnet sich - Zielfelder wählen, neue Werte eingeben
  4. Live-Vorschau zeigt für jedes Produkt das Ergebnis
  5. Bestätigen - Operation läuft in zwei Phasen (Snapshot + Apply)
  6. Live-Progress-Anzeige mit Counter, Phase und ETA - jederzeit per Abbrechen stoppbar

Editierbare Felder

Per Mehrfachänderung können über 25 Felder gepflegt werden:

Stammdaten

  • Name (pro Sprache), Beschreibung (pro Sprache)
  • Meta-Title, Meta-Description, Keywords
  • Hersteller, EAN, Artikelnummer
  • Produkteinheit (Stück, Liter, Kilogramm, Meter, …) - als eigene Bulk-Aktion

Preise und Grundpreis

  • Listenpreis und UVP, Staffelpreise (Bulk-Apply auf alle Staffeln)
  • Einkaufspreis brutto + netto als zwei getrennte Aktionen - der jeweils andere Wert wird automatisch über die Steuerklasse des Produkts berechnet
  • Streichpreis/UVP, Günstigster Preis 30 Tage (Omnibus)
  • Grundpreis (eigene Bulk-Aktion): Inhaltsmenge und Grundpreiseinheit gleichzeitig
  • Steuersatz neu zuweisen (Bruttopreis bleibt, Netto wird neu berechnet)

Bestand und Versand

  • Bestand, Lieferzeit, Versandfrei-Flag, Gewicht, Höhe, Breite, Länge

Sales Channels und Kategorien

  • Sales-Channel-Sichtbarkeit (mehrere parallel)
  • Hauptkategorie, Zusatzkategorien
  • Cross-Selling-Zuordnungen

Properties und Custom Fields

  • Properties (zuweisen und entfernen)
  • Custom Fields aller Typen, Tags
Mehrere Aktionen kombinieren: In einem Bulk-Lauf können beliebig viele Aktionen gleichzeitig ausgeführt werden - z.B. Hersteller setzen + Steuersatz ändern + Sales-Channel-Sichtbarkeit + Produkteinheit in einem Vorgang.

Vollständige Filter-Anzeige vor jeder Operation

Vor jeder Mehrfachänderung zeigt das PIM alle aktiven Filter aus dem ausgewählten Preset als lesbare Chips: Hersteller, Kategorien, Tags, Eigenschaften, Lagerbestand-Range, Preis-Range, Gewicht-Range, Datumsbereiche, Sichtbarkeit, Steuerklasse, Lieferzeit, dynamische Produktgruppen, Verkaufskanal, EAN-Status, Closeout, Versandfrei und SEO-Meta-Status. IDs werden in lesbare Klarnamen aufgelöst (z.B. Verkaufskanal-Name statt UUID). „Keine Filter aktiv" wird mit rotem Rahmen markiert - bewusste Warnung gegen versehentliche Bulk-Operationen.

Sprachauswahl bei übersetzbaren Feldern

Bei übersetzbaren Bulk-Feldern erscheint ein Sprachdropdown, sobald ein Wert eingetragen ist. Der Wert wird in der Standardsprache gesetzt und zusätzlich in jede gewählte Sprache geschrieben - eine Aktion, mehrere Sprachen.

Felder mit Sprachauswahl:

  • SEO-Tab: Meta-Title, Meta-Description, SEO-URL
  • Zusatzfelder (Custom Fields): alle Custom Fields, die in Shopware als übersetzbar markiert sind
  • Versand-Tab: Verpackungseinheit (singular/plural) - das einzige sprachpflichtige Feld im Versand-Bereich

Felder bewusst ohne Sprachauswahl:

  • Produkteinheit / Maßeinheit: ist nur eine Referenz auf eine Einheit (Stück, Liter, kg) - die Übersetzung hängt an der Einheit selbst, nicht am Produkt
  • Sprachunabhängige Felder: Preis, Lagerbestand, EAN, Gewicht, Hersteller, Aktiv-Status, Maße, Lieferzeit - diese existieren nur einmal pro Produkt
Mehrere Sprachen gleichzeitig: Bei einer Bulk-Aktion „Verpackungseinheit setzen" mit Sprachen „Deutsch + Englisch + Französisch" wird der Wert in alle drei Sprachen geschrieben - kein dreifaches Ausführen nötig.

Daten-Vererbung Parent → Varianten

Eine dedizierte Bulk-Aktion überträgt Felder vom Stammartikel auf alle seine Varianten - sinnvoll für Werte, die sich zwischen Varianten nicht unterscheiden:

  • Beschreibung und Meta-Texte
  • Staffelpreise auf alle Varianten anwenden
  • Cross-Selling-Streams übertragen
  • Bilder und Mediengalerie an Varianten weitergeben
  • SEO-Felder (Title, Description, Keywords) übernehmen

Die Aktion ist sowohl per Bulk-Operation auf mehrere Stammartikel anwendbar als auch im Varianten-Tab eines einzelnen Produkts verfügbar.

Zuordnung - Eigenschafts-Übersetzungen

Fehlen Eigenschaftsoptionen in einer Sprache, zeigt Shopware über die Fallback-Kette den Namen aus einer anderen Sprache - in der Zuordnung stehen dann scheinbar gemischte Sprachen. Der Zuordnungs-Tab macht das sichtbar und direkt behebbar.

  • Markierung: Optionen ohne Übersetzung werden farblich hervorgehoben und mit dem Hinweis „keine Übersetzung" versehen; oben erscheint eine Zusammenfassung mit der Anzahl.
  • Übersetzungsdialog: Über das Stift-Symbol an jeder Option lässt sich der übersetzte Name direkt hinterlegen, ohne den Shopware-Eigenschaftskatalog zu verlassen. Mehrere Sprachen sind gleichzeitig pflegbar, jede mit eigenem Textfeld und den zugehörigen Verkaufskanälen zur Orientierung.
  • Maßstab sind die Verkaufskanäle: Geprüft wird gegen die Sprachen der Kanäle, denen die betroffenen Artikel tatsächlich zugeordnet sind. Ein gesetzter Verkaufskanal-Filter hat Vorrang.
  • Auch dem Stammartikel zuweisen: Die Checkbox schreibt die gewählten Optionen zusätzlich beim Elternprodukt der betroffenen Varianten, im Entfernen-Modus entsprechend auch dort. Über die Konfigurationsoption „Varianten-Eigenschaften immer auch in den Stammartikel schreiben" lässt sie sich dauerhaft vorbelegen.
Abschaltbar: Die Option „Fehlende Übersetzungen in der Mehrfachänderung anzeigen" liegt in der Konfiguration im Tab Mehrfachänderung unter „Zuordnung / Eigenschaften". Standardmäßig eingeschaltet.

Felder leeren - inklusive Zusatzfelder

Neben Stammdaten-, SEO- und Verknüpfungsfeldern lassen sich auch die Zusatzfelder der Produkte gezielt leeren. Da Zusatzfelder übersetzbar sind, greift die vorhandene Sprachauswahl auch hier; die Werte vor dem Leeren werden im Snapshot mitgesichert und bleiben damit rückholbar.

Bewusst ohne Sammelschalter: Zusatzfelder werden einzeln ausgewählt. Ein Shop hat schnell mehrere Dutzend davon - ein versehentliches Leeren aller Felder wäre zu weitreichend.

Snapshot & Revert

Bei jeder Mehrfachänderung wird automatisch ein Snapshot der vorherigen Werte gespeichert. Snapshots bleiben 30 Tage erhalten. Übersicht aller Snapshots unter PIM → Snapshots. Revert pro Produkt einzeln möglich oder für die gesamte Operation.

Achtung: Drei Felder sind nicht snapshot-fähig: SEO-URL (generiert, nicht reversibel), Staffelpreise→Varianten, Cross-Selling→Varianten.

Live-Vorschau

Vor dem Speichern zeigt eine Tabelle für jedes ausgewählte Produkt: aktuellen Wert, neuen Wert nach Operation, Diff-Markierung bei Text-Feldern, Hinweis bei nicht änderbaren Feldern.

CSV-Export

Der CSV-Export erzeugt eine Datei mit allen oder gefilterten Produkten. Konfigurierbar über die Konfigmatrix.

  • Spalten beliebig auswählbar - Standard-Felder, Custom Fields (einzeln pro cf_*-Spalte), Properties, Übersetzungen
  • Spalten-Trenner: Komma, Semikolon, Tab
  • Dezimaltrennzeichen: Punkt oder Komma - pro Export überschreibbar
  • Encoding: UTF-8 (mit BOM-Option für Excel)
  • Filter berücksichtigen: Aktive Filter aus dem CSV-Modal werden angewandt
  • Varianten-Export: pro Profil oder global aktivierbar
  • Vorgefertigte Profile: Stammdaten, SEO, Bilder, Preise & Lager, Eigenschaften & Custom Fields, Cross-Selling, Übersetzungen

Spalte „Einheit (Name)"

Zusätzlich zur Einheit-ID (UUID) wird die Produkteinheit als Klarname exportiert (z.B. „Liter", „Kilogramm", „Stück"). Im Profil „Preise & Lager" ist der Klarname als Standard aktiviert.

CSV-Import

Der CSV-Import liest eine Datei und legt neue Produkte an oder aktualisiert bestehende. Match-Logik wählbar: per Artikelnummer (Standard), ID (UUID) oder EAN.

Auto-Erkennung „Einheit"

Der Importer erkennt sowohl „Einheit (Name)" als auch „Produkteinheit" als Spaltennamen automatisch und löst Klarnamen wie „Liter" oder „Kilogramm" in die korrekte Einheit-ID auf.

Automatische Lookups

Beim Import werden fehlende Entitäten automatisch erstellt: Hersteller, Tags, Kategorien, Steuerklassen, Lieferzeiten, Eigenschaften und Produkteinheiten. Bei Varianten werden Parent-IDs auch über Artikelnummer oder EAN aufgelöst - UUIDs sind nicht zwingend nötig.

Sicherheit: Der Import-Tab ist ausschließlich Superadmins zugänglich - zusätzlich zur Berechtigung staw_pim.csv_import.

DATANORM-Import (4.0 & 5.0)

Neben CSV unterstützt der Importer das im Handwerk und Großhandel verbreitete DATANORM-Format zum Einlesen von Artikeldaten aus Lieferanten-Katalogen:

  • DATANORM 4.0 und 5.0: Beide Versionen werden über den V;-Header automatisch erkannt (inkl. Versions- und Herstellererkennung). DATANORM 5.0 nutzt ein eigenes Feldlayout für Name, Preis und EAN.
  • Volume-Dateien: Beliebige Volume-Endungen von .001 bis .999 werden akzeptiert (nicht nur .001-.003) - so lassen sich auch aufgeteilte Kataloge wie DATANORM.500 einlesen.
  • Satzarten: Unterstützt werden u.a. A (Artikel-Stammsatz), B (Warengruppen), T (Langtext/Beschreibung) und P (Preise / DATPREIS).

Wie beim CSV-Import werden fehlende Entitäten (Hersteller, Warengruppen als Kategorien etc.) automatisch angelegt; der Abgleich erfolgt über die Artikelnummer.

Datentyp-Erkennung

Der Importer erkennt Datentypen automatisch je Sprache und Spalte:

  • Boolean: 1/0, true/false, ja/nein, aktiv/inaktiv
  • Datum: ISO-Notation und deutsche Notation
  • Zahl: Komma oder Punkt als Dezimaltrenner
  • Array: Pipe-Separator (|) bei Multi-Select-Custom-Fields
  • JSON: bei komplexen Feldern wie Übersetzungen

Importierbare und exportierbare Felder

Folgende Felder sind im CSV-Export und/oder -Import verfügbar. Die Beispielwerte zeigen das erwartete Format pro Spalte (frei erfundene Demo-Daten eines Outdoor-Shops).

Beispielzeile (gekürzt): Eine CSV-Zeile für ein einfaches Produkt könnte so aussehen:
productNumber;name_de-DE;price;stock;taxRate;active;manufacturer;categories
SW-TSHIRT-001;Bio-Baumwoll T-Shirt „Summit";24.90;120;19;1;Nordtrek;Bekleidung|T-Shirts

Stammdaten

  • productNumber - Artikelnummer (Match-Schlüssel), z.B. SW-TSHIRT-001
  • name, description - pro Sprache (name_de-DE), z.B. Bio-Baumwoll T-Shirt „Summit" bzw. <p>Weiches Bio-Baumwoll-Shirt mit Rundhals.</p>
  • ean (4012345678901), manufacturerNumber (NT-TS-2024), manufacturer (Nordtrek)
  • taxRate (19), active (1), markAsTopseller (0), isCloseout (0), shippingFree (0)

Preise

  • price (24.90), price_net (20.92), listPrice (29.90), purchasePrice (11.50)
  • tier_* - Staffelpreise, z.B. tier_10 = 22.90, tier_50 = 19.90
  • purchaseUnit (1), referenceUnit (1)
  • unitId oder Einheit (Name) oder Produkteinheit, z.B. Stück

Bestand und Versand

  • stock (120), minPurchase (1), maxPurchase (10), purchaseSteps (1)
  • deliveryTime (1-3 Tage), restockTime (5)
  • weight (0.18), width (20), height (2), length (30) - in kg bzw. mm

SEO

  • metaTitle (Bio-Baumwoll T-Shirt „Summit" | Nordtrek), metaDescription (Weiches Bio-Baumwoll-Shirt für jeden Tag.), keywords (t-shirt, bio-baumwolle, outdoor), packUnit (Stück) - pro Sprache

Kategorien und Sichtbarkeit

  • categories - Pipe-separiert, z.B. Bekleidung|T-Shirts|Herren
  • visibilities - pro Channel, z.B. Hauptshop:30|Outlet:20 (30 = sichtbar, 20 = im Listing versteckt)

Varianten

  • parentId (auch über parent_productNumber / parent_ean auflösbar), z.B. parent_productNumber = SW-TSHIRT-001
  • mainVariantId (auch über Artikelnummer/EAN)
  • options (Farbe:Blau|Größe:M), configuratorGroupConfig

Eigenschaften, Custom Fields, Bilder, Cross-Selling, Tags

  • properties - Pipe-separiert, z.B. Material:Bio-Baumwolle|Farbe:Blau|Passform:Regular
  • cf_* - Custom Fields als einzelne Spalten, auch pro Sprache cf_*_de-DE, z.B. cf_pflegehinweis_de-DE = 30°C Maschinenwäsche
  • cover, images - URL(s) der Bilder, z.B. https://cdn.example.com/tshirt-summit-blau.jpg (mehrere pipe-separiert)
  • crossSellings - Format „StreamName:productNumber1,…", z.B. Passendes Zubehör:SW-CAP-007,SW-SOCKS-012
  • tags - Pipe-separiert, z.B. Neuheit|Nachhaltig|Bestseller

Nur Export (nicht importierbar)

  • createdAt (2024-03-12 09:15:00), updatedAt, Variantenanzahl (6), sales (342), ratingAverage (4.6), availableStock (118)

Feed-Generator - automatische URL-Feeds

Über den Feeds-Tab stellst du automatisch aktualisierte URL-Feeds bereit - z.B. für Google Shopping, Preisvergleichsportale oder ERP-Anbindungen. Ein Feed liefert die Produktdaten unter einer eindeutigen URL mit Token-Authentifizierung.

Feed aus Vorlage oder Profil anlegen

Oben im Feeds-Tab gibt es den Selektor „Feed aus Vorlage / Profil anlegen". Damit aktivierst du in einem Klick einen neuen Feed:

  • Built-in-Vorlage wählen - Stammdaten, Preise & Lager, SEO, Bilder, Varianten, Vollexport: Ein gespeichertes Export-Profil mit passender Feldauswahl wird automatisch erzeugt, der Feed aktiviert, ein Token generiert. Das aus der Vorlage angelegte Profil heißt z.B. „Stammdaten (Feed)".
  • Bestehendes Profil wählen - Eigene Export-Profile (die du im Export-Tab gespeichert hast) lassen sich direkt als Feed aktivieren.
Mehrere Feeds pro Profil: Feeds sind vom Quell-Profil entkoppelt - du kannst beliebig viele Feeds für dasselbe Profil anlegen. Beispiel: ein „Stammdaten"-Profil als Basis für mehrere Feeds mit unterschiedlichen Filtervorlagen pro Verkaufskanal oder Zielmarkt.

Akkordeon-Liste mit Status, Chips und Aktionen

Alle Feeds und alle eigenen Export-Profile erscheinen als kompakte Liste. Jede Zeile zeigt:

  • Name · umbenennbar
  • Status-Pille · „Feed aktiv" (grün) oder „kein Feed" (grau)
  • Feed-URL-Vorschau · die tokenisierte URL bei aktiven Feeds
  • Filtervorlage-Chip · die gewählte Filtervorlage oder „kein Filter"
  • Produktanzahl-Chip · live ermittelt aus dem Katalog
  • Stift-Symbol rechts (öffnet/schließt den Editor) und Papierkorb (löscht mit Sicherheitsabfrage)

Ein Klick auf die Zeile öffnet und schließt den Editor zuverlässig - ein Chevron rechts zeigt den Zustand und dreht sich beim Öffnen. Der Papierkorb-Button reagiert separat (verhindert versehentliches Auf-/Zuklappen).

Editor mit Umbenennen, Modus, Filtervorlage

Im aufgeklappten Editor stehen alle Konfigurations-Optionen pro Feed:

  • Namensfeld - Feed umbenennen (Name muss eindeutig sein; Kollision wird abgelehnt)
  • Aktivieren-Toggle - Feed online/offline schalten
  • Modus - XML, CSV, TSV oder JSON
  • Filtervorlage - Auswahl aus den gespeicherten Filtervorlagen
  • Feed-URL - fertig zum Kopieren
  • Token - anzeigen oder regenerieren

Filtervorlagen - was wird übernommen, was bewusst nicht

Statt einfacher Filter-Checkboxen wählst du im Feed eine gespeicherte Filtervorlage - die gleiche, die du auch im Listing oder bei der Mehrfachänderung nutzt.

Im Feed angewendet (serverseitig zuverlässig abbildbar): Aktiv-Status, Lagerbestand (Min/Max), Hersteller, Kategorie, Verkaufskanal.

Im Feed bewusst NICHT angewendet: Qualitäts- und Vollständigkeitskriterien (z.B. „Bilder fehlen", „Meta-Daten unvollständig", „ohne Beschreibung", „SEO-Score < X"). Diese Bewertungen werden im Listing live berechnet und sind im Feed-Kontext nicht zuverlässig serverseitig abbildbar.

Warum diese Trennung: Würde der Feed Qualitätskriterien stillschweigend anwenden, würde dein ERP eine still verfälschte Produktmenge bekommen. Mit der klaren Trennung weißt du genau: Filtervorlage definiert welche Produkte, der Feed liefert diese Produkte.

Migration alter Feeds

Automatisch & nicht-destruktiv: Falls du bisher Feeds hattest, die direkt am Export-Profil hingen (mit Token/URL), werden diese beim ersten Laden automatisch in die neue Liste übernommen. Bestehende Feed-URLs in deinem ERP, Google-Shopping-Konto oder bei Preisvergleichsportalen bleiben gültig - kein Re-Konfigurieren nötig.

Token und URL-Format

Jeder Feed bekommt einen eindeutigen Token. Die URL hat das Format:

  • https://dein-shop.de/staw-pim/feed/{token}.xml
  • https://dein-shop.de/staw-pim/feed/{token}.csv
  • https://dein-shop.de/staw-pim/feed/{token}.json

Der Token-Regenerieren-Button erzeugt einen neuen Token - die alte URL wird damit ungültig. Sinnvoll, wenn ein Feed-Link öffentlich geleakt wurde.

Backend & Streaming-Performance

Der FeedExportService ist auf große Kataloge ausgelegt. Vier Performance-Layer arbeiten zusammen:

  • DBAL-Streaming in 2.000er-Batches - Daten werden in Chunks per PHP-Generator (yield) ausgegeben statt komplett im Speicher gehalten. Memory-Verbrauch ist unabhängig von der Katalog-Größe.
  • Keyset-Pagination über product_number (eindeutige, indizierte Spalte) statt LIMIT/OFFSET - die Ausgabezeit bleibt linear, auch bei sehr großen Katalogen.
  • gzip-Komprimierung serverseitig per gzencode(), wenn der Client Accept-Encoding: gzip sendet. Feed-CSVs komprimieren ~80-90 % - drastisch kürzere Übertragung.
  • Datei-Modus für die größten Kataloge: ein Scheduled Task (alle 15 Min) schreibt die Datei atomar nach var/staw-pim-feeds/ via Flysystem. Beim Abruf wird die vorgenerierte Datei ausgeliefert - keine DB-Last bei jedem Poll.

Zusätzlich: @ini_set('memory_limit', '1024M') defensiv im Endpoint - auch breite Spaltenauswahlen mit dutzenden Custom Fields laufen sauber durch. Filterkriterien (Hersteller, Kategorie, Bestandsbereich) werden serverseitig im SQL angewendet (inkl. Varianten-Vererbung auf den Hauptartikel) - kein Daten-Roundtrip in die Vue-Schicht.

Graceful Fallback bei Modus „Datei": Wenn die Cron-Datei noch nicht existiert (z.B. direkt nach dem Anlegen eines neuen Feeds), fällt der Controller automatisch auf Live-Generierung zurück. Du musst nicht warten bis der Cron das erste Mal gelaufen ist.
Sicherheit: Feed-URLs sind tokenisiert und nicht öffentlich indexierbar. Trotzdem nicht öffentlich teilen - wer den Token kennt, sieht die Produktdaten des Feeds.

Varianten-Generator - Eigenschaftsauswahl

Der Varianten-Generator erzeugt aus Property-Kombinationen automatisch Varianten zu einem Hauptartikel. Visuelle Auswahl aller Properties mit Werten gruppiert (z.B. „Farbe → rot/blau/grün"). Live-Vorschau der Kombinationen unten.

Vereinheitlichte Suche

Eine einzige Suche oben durchsucht Eigenschaften und Optionen gleichzeitig. Tippst du „rot", bleiben alle Eigenschafts-Gruppen sichtbar, die irgendwo die Option „rot" haben - und in der rechten Spalte werden die Treffer hervorgehoben.

Muster für SKU und Name & Pattern-Akkordeons

Pro Variante können SKU und Name automatisch erzeugt werden anhand eines Musters.

Verfügbare Variablen

  • {base} - SKU des Hauptartikels
  • {property:Farbe}, {property:Größe} - Property-Werte
  • {counter}, {counter:03} - fortlaufende Nummer

Pattern-Akkordeons

Statt zwei nackter Inputs nebeneinander: zwei eigenständige Akkordeons - eines für die Artikelnummer, eines für den Variantennamen. Eingeklappt zeigen sie das aktuelle Pattern als Code-Chip rechts; aufgeklappt erscheint das Eingabefeld plus klickbare Variable-Chips. Ein Klick auf einen Chip fügt die Variable direkt ins aktive Pattern ein.

Variantenmatrix · Bulk-Preise und Bestand

Bei einem Variant-Produkt mit vielen Optionen ist die Preis- und Bestandspflege zeilenweise mühsam. Die Variantenmatrix legt alle Varianten in einer Tabelle übereinander: Eine Achse zeigt die erste Eigenschaft (z.B. Farbe), die andere die zweite (z.B. Größe). Pro Zelle stehen Preis und Bestand zum direkten Editieren.

  • Inline-Edit für Preis, Bestand, EAN, MPN
  • Spaltenkonfiguration: welche Werte angezeigt werden, ist umschaltbar
  • Sortierung der Eigenschaften per Drag-and-Drop
  • Optional: Werte aus dem Stammartikel auf alle leeren Zellen anwenden

Sicheres Löschen

Beim Löschen von Varianten prüft das Plugin auf offene Bestellungen.

  • Modus „Sicher" (empfohlen): Varianten mit offenen Bestellungen werden nicht gelöscht, sondern deaktiviert.
  • Modus „Vollständig": Varianten werden gelöscht, auch wenn Bestellungen vorliegen.

Eigenschaften und Bilder auf Varianten übertragen

Die Vererbung in Shopware wirkt pro Feld nach dem Prinzip alles-oder-nichts: Sobald eine Variante einen eigenen Wert hat, erbt sie in diesem Feld gar nichts mehr vom Stammartikel. Das ist die häufigste Erklärung dafür, dass im Frontend weniger Eigenschaften oder gar kein Bild erscheint, obwohl am Stammartikel alles gepflegt ist. Drei Schaltflächen lösen genau das auf.

  • „Eigenschaften auf Varianten übertragen" (Reiter Eigenschaften): Ergänzt bei Varianten mit eigenen Eigenschaften die fehlenden des Stammartikels. Varianten ohne eigene Eigenschaften erben ohnehin alles und bleiben unangetastet; vorhandene eigene Zuordnungen bleiben erhalten.
  • „Bilder auf Varianten übertragen" (Stammdaten → Bilder & Medien): Legt für jede Variante ohne eigene Bilder eigene Bildzuordnungen auf dieselben Mediendateien an, inklusive Reihenfolge, und setzt das Titelbild auf die eigene Kopie des Elterncovers. Die Anzeige im Listing ist damit unabhängig davon, ob die Vererbung in der Storefront ankommt. Varianten mit eigenen Bildern bleiben unverändert und werden in der Meldung ausgewiesen.
  • Zuweisungsdialog der Varianten: Dieselbe Übertragung steht auch dort zur Verfügung, ergänzt um die Checkbox „Auch dem Stammartikel zuweisen".

Abweichungen sichtbar machen

  • Eigenschaften, die ausschließlich an Varianten hängen, werden orange hervorgehoben; betroffene Gruppen bekommen in der Gruppenliste einen orangen Punkt und die Zählleiste nennt die Anzahl.
  • Gruppen mit abgeschaltetem „Auf Produktdetailseite anzeigen" werden als „Nicht in Storefront" markiert - damit ist sofort klar, warum im Frontend weniger Eigenschaften erscheinen als im Admin.
  • Die Vollständigkeit von Varianten löst vererbte Werte auf: Hat die Variante keinen eigenen Wert, zählt der des Stammartikels. Artikelnummer und Bestand bleiben bewusst variantenspezifisch.

Duplizieren mit wählbarer Vererbung

Beim Duplizieren eines Varianten-Artikels fragt ein Dialog, welche Felder die Varianten vom Hauptartikel erben sollen: Bilder, Name, Preis, Gewicht und EAN. Geerbte Felder übernehmen automatisch spätere Änderungen am Hauptartikel, nicht geerbte werden als eigener Wert kopiert. Bestand und Artikelnummer bleiben systembedingt immer variantenspezifisch; bei einfachen Artikeln ohne Varianten erscheint die Abfrage nicht. Der Duplikat-Stammartikel bekommt dabei eine eigene, korrekte SEO-URL nach Kanal-Vorlage.

Berechtigung: Die drei Übertragen-Schaltflächen lassen sich über die Konfigmatrix-Berechtigung „Auf Varianten übertragen" steuern. Standardmäßig eingeschaltet; ausgeschaltet sehen nur Superadmins die Schaltflächen.

KI-Textgenerierung - Anbieter und Modelle

Das PIM integriert vier KI-Anbieter direkt im Shopware-Admin. Jeder hat eine eigene Sektion in der Konfigmatrix unter Übersetzungen (Aktivieren, API-Key, Modell, Verbindungstest, Standard-Tonalität):

  • Anthropic Claude: Sonnet 5 (Standard), Sonnet 4.6, Opus 4.8, Fable 5, Haiku 4.5
  • OpenAI ChatGPT: GPT-5.6 (Sol/Terra/Luna), GPT-5.5, GPT-5.4, GPT-5 mini (Standard), GPT-5 nano, GPT-4.1 mini
  • Mistral AI: Mistral Large 3, Medium 3.5, Small 4
  • Google Gemini: Gemini 3.1 Pro, 3.5 Flash, 3.1 Flash-Lite

Sind mehrere Anbieter aktiviert, kann im KI-Generator-Modal pro Aufruf der gewünschte Anbieter und das Modell ausgewählt werden. Der Produkt-Detail-Generator (inkl. Varianten) und die Inline-KI-Textkomponente nutzen alle vier Provider.

API-Key einrichten

  1. Beim jeweiligen Anbieter einen API-Key erzeugen (console.anthropic.com, platform.openai.com, console.mistral.ai oder Google AI Studio)
  2. Im PIM unter Konfigmatrix → Übersetzungen den Key in der jeweiligen Anbieter-Sektion eintragen
  3. Mit dem „Verbindung testen"-Button prüfen (je Anbieter separat)
  4. Modell auswählen und Tonalität festlegen
  5. Mit „Bulk freischalten" aktivieren
Sicherheit: Keys werden verschlüsselt in der Datenbank gespeichert und nur serverseitig verwendet.

Was kann generiert werden

  • Produktname - nicht vorausgewählt, damit bestehende Namen nicht versehentlich überschrieben werden; überlange Namen werden auf 255 Zeichen gekürzt
  • Beschreibung (HTML) mit Absatzstruktur
  • Meta-Title (max 60 Zeichen)
  • Meta-Description (max 155 Zeichen)
  • Keywords (komma-separierte Liste)

Stilvorlagen

5 vordefinierte Tone-Templates: Professionell, locker-modern, Premium/Luxus, technisch, emotional.

Abgleich mit Fremdsystemen

Der Fremdsystem-Schutz wacht darüber, dass Änderungen aus einem angebundenen System die im PIM gepflegten Werte nicht überschreiben. Der Abgleich lässt sich auf zwei Wegen auslösen.

  • Über die Kommandozeile - der klassische Weg, wenn ein Zugang besteht
  • Über eine Adresse im Browser - für Umgebungen ohne Konsolenzugang, etwa bei geteiltem Hosting

Die Adresse findest du im Bereich "Referenzstand und Protokoll". Ein Cron-Dienst deines Hosters oder ein externer Aufrufdienst kann sie regelmäßig abrufen. Im Normalfall arbeitet sie nur die vorgemerkten Artikel ab; mit angehängtem ?full=1 wird stattdessen der gesamte Bestand geprüft.

Der Aufruf erfolgt ohne Anmeldung und ist ausschließlich über einen zufällig erzeugten Zugriffsschlüssel in der Adresse geschützt. Der Vergleich läuft zeitkonstant, und der Aufruf kann ausschließlich diesen einen Abgleich auslösen - mehr ist damit nicht möglich.

Schlüssel wechseln: Über "Neuer Schlüssel" lässt sich die Adresse jederzeit ungültig machen und ersetzen. Danach muss die neue Adresse beim Cron-Dienst hinterlegt werden.
Beim Update von einer Version vor 1.10.25: Der Schlüssel ging bis dahin beim Speichern der Einstellungen verloren, eine zuvor kopierte Adresse zeigt also ins Leere. Bitte die Adresse im Reiter "Fremdsysteme" einmal neu kopieren und beim Cron-Dienst hinterlegen.

Die beiden Bildfilter

Es gibt zwei getrennte Filter für Titelbilder, und der Unterschied ist entscheidend:

  • Titelbild (Hauptartikel) - prüft das Titelbild des Stammartikels
  • Titelbild (Varianten) - prüft, ob die Varianten ein eigenes Bild haben, mit den Auswahlmöglichkeiten "Varianten ohne eigenes Bild" und "Varianten mit eigenem Bild"

Wer Varianten ohne Bild sucht und den ersten Filter wählt, erhält zu Recht kein Ergebnis, sofern die Hauptartikel ein Bild haben. Bis Version 1.10.27 hießen beide "Cover-Bild" und "Variant-Cover", was den Unterschied nicht erkennen ließ.

Der Variantenfilter wirkt über die Varianten auf den Stammartikel: Gesucht werden Stammartikel, die mindestens eine Variante ohne eigenes Titelbild haben. Die betroffenen Varianten erscheinen wie gewohnt darunter. Liste, gespeicherte Voreinstellungen und CSV-Export liefern dabei dasselbe Ergebnis.

Herstellerauswahl

Die Herstellerauswahl lädt den gesamten Bestand blockweise, nicht nur einen Ausschnitt. Das betrifft die Detailansicht, die Mehrfachänderung und die Variantenansicht.

Bis Version 1.10.28: Die Liste brach nach 500 Einträgen mitten im Alphabet ab. Alle danach einsortierten Hersteller ließen sich gar nicht auswählen, und auch die Suche innerhalb der Auswahl fand sie nicht, weil sie nie geladen wurden. Der Filter in der Produktliste war davon nicht betroffen.

Performance

  • Browser-native Virtualisierung via content-visibility: auto
  • Server-side Filtering - alle Filter in der DB
  • Lazy-Loading der Varianten
  • Bulk-Operations in Batches mit Progress
  • Minified Bundle - ca. 23 % kleiner als unminified
  • Sticky Header in der Konfigmatrix

Mehrfachänderung & Import: asynchrone Indexierung

  • Queue-Indexierung statt sync: Produkt-Schreibvorgänge der Mehrfachänderung nutzen standardmäßig Shopwares asynchrone Queue-Indexierung (Header use-queue-indexing) statt synchroner Indexierung im Request. Die Schreib-Batchgröße liegt bei 25 (vorher 10) - große Bulk-Läufe laufen um ein Mehrfaches schneller. Konfigurierbar über bulkIndexingBehavior: use-queue-indexing | disable-indexing | sync.
  • CSV-Import ohne Komplett-Reindex: Importe nutzen ebenfalls Queue-Indexierung - nur die importierten Produkte werden asynchron nachindexiert. Der frühere Reindex des gesamten Katalogs nach jedem Import entfällt (läuft nur noch bei importIndexingMode = 'disable'). Modi: queue | disable | sync.
  • Gebündelte Requests: Audit-Log-Schreibvorgänge werden alle 600 ms als ein Batch gespeichert (zusätzlich beim Verlassen der Seite); Mehrfach-Freigaben laufen über einen Batch-Endpoint (ein Request pro 200 Produkte); Bulk-Übersetzungen und Freigabe-/Audit-Writes nutzen INSERT … ON DUPLICATE KEY UPDATE.
  • Varianten-Löschung gebündelt: Ein IN-Delete statt einem Statement pro Variante, mit Fehler-Rückmeldung je ID und automatischem Einzel-Fallback bei z.B. Fremdschlüssel-Sperren.
  • Snapshots lazy: Bulk-Edit-Snapshots und Rückgängig-Daten (potenziell mehrere MB) werden nur einmal pro Sitzung geladen.
  • Stale-Response-Schutz: Schnelle Filter-/Seitenwechsel können neuere Ergebnisse nicht mehr mit älteren überschreiben.

Produktliste mit Varianten

  • Nur benötigte Felder: Beim Anzeigen der Varianten werden ausschließlich die Felder geladen, die die Liste tatsächlich darstellt, samt Vorschaubild und Varianten-Optionen. Eigene Spalten bleiben berücksichtigt; zeigt eine eigene Spalte auf ein verschachteltes Feld, wird vollständig geladen, damit keine Spalte leer bleibt.
  • Vollständigkeit vom Server: Der Prozentwert wird serverseitig berechnet - nach derselben Vorschrift wie der Vollständigkeitsfilter. Beschreibung und Meta-Texte jeder Variante müssen dafür nicht mehr in den Administrationsbereich geladen werden, die übertragene Datenmenge sinkt erheblich. Schlägt die Abfrage fehl, greift weiterhin die Berechnung im Browser.
  • Laufzeitmessung: Nach dem Laden stehen die Zeiten je Phase (Stammartikel-Abfrage, Varianten-Abfrage, Aufbereitung) in der Browser-Konsole unter window.stawPimLastLoadTimings - rein diagnostisch.

Diagnose & Stabilität

  • Sitzungs-Fehlerprotokoll: Die letzten 50 Fehler stehen in window._stawPimErrLog - bisher stille Fehlerpfade (Audit-Flush, Batch-Freigaben, Snapshot-Laden) protokollieren Fehlschläge, sodass Probleme auch ohne Server-Log-Zugriff über die Browser-Konsole diagnostizierbar sind.
  • Interne Testsuite: Leichtgewichtiger Test-Runner (kein PHPUnit nötig) prüft SEO-Fallback-Logik, Snippet-Konsistenz de-DE ↔ en-GB und Versions-Konsistenz bei jedem Release.

Troubleshooting

Listing lädt nicht

Cache leeren, Browser-Konsole prüfen, PHP-Memory-Limit prüfen (512 MB empfohlen bei großen Katalogen).

CSV-Import bricht ab

Encoding (UTF-8), Trenner und PHP-Limits prüfen.

KI-Generierung schlägt fehl

API-Key testen unter Konfigmatrix → KI → Verbindung testen. Bei Anthropic: Guthaben aufladen. Bei OpenAI: Billing-Status prüfen.

Kontakt & Support

Antwortzeit: in der Regel 1-2 Werktage.