Vier Attribute bei einem Produkt. Neunzehn Werte beim ersten, acht, acht und drei. Das ergibt 3,648 Varianten eines Artikels, und das ist keine bloße Theorie: Ein Händler meldete genau dies im Problem-Tracker von PrestaShop , und zwar bei 30 Produkten und über 100,000 Datenbankzeilen.
Die Produktseiten wurden nicht mehr angezeigt, und im Backend wurde ein leerer weißer Bildschirm angezeigt.
Nichts war kaputt gegangen. Der Katalog funktionierte genau so, wie er gebaut worden war, und zwar in einem Umfang, den niemand dafür optimiert hatte.
Das Problem, das viele Shopbetreiber erst zu spät erkennen: PrestaShop-Produktkombinationen sind Potenzen, keine Summen. Zehn Werte in der einen Gruppe und zehn in der anderen ergeben hundert Varianten für Preisgestaltung, Lagerbestand und Fotos, nicht zwanzig. Ein solides Produktkombinationsmanagement in PrestaShop beginnt genau hier.
1.0 PrestaShop-Attribute und -Kombinationen: Worin liegt der Unterschied?
Zwei Begriffe werden ständig verwechselt, und der Unterschied entscheidet darüber, wie Sie Ihren Katalog aufbauen.
Produktattribute in PrestaShop sind die vom Kunden ausgewählten Merkmale wie Größe, Farbe und Speicherkapazität. Ein Merkmal hingegen ist ein beschreibender Text, der auf der Seite angezeigt wird und nicht ausgewählt werden kann: Gewicht, Material, Herkunftsland. Die PrestaShop-Dokumentation bringt es auf den Punkt: Ein Kunde kann eine iPad-Variante anhand von Farbe und Speicherkapazität auswählen, aber nicht anhand des Gewichts.
Wenn Sie hier einen Fehler machen, hat das in jedem Fall Konsequenzen. Behandeln Sie ein Merkmal als Attribut, erzeugen Sie Hunderte von Varianten, zwischen denen sich niemand jemals entscheiden wird, und jede Variante belegt Zeilen in fünf Tabellen. Das Gegenteil ist noch schlimmer: Kunden können die Version, die sie bestellt haben, nicht kaufen.
Die Struktur besteht aus drei Ebenen. Eine Attributgruppe wie „Größe“ enthält Werte wie „Klein“ und „Mittel“, und eine Kombination ist ein Paar aus allen Gruppen. Im Backend entspricht dies einer Zeile in der Tabelle „product_attribute“ mit eigener Referenz, Preisanpassung, Gewicht und Lagerbestand.
2.0 Warum vervielfachen sich die Produktkombinationen in PrestaShop so schnell?
Das vollständige kartesische Produkt – die Summe aller Werte aus jeder Gruppe und aller Werte aus jeder anderen Gruppe – ist das Ergebnis des PrestaShop-Kombinationsgenerators . Die Anzahl der PrestaShop-Produktvarianten ergibt sich aus dem Produkt dieser Zahlen, nicht aus ihrer Addition.
Beobachte, wie schnell dir das entgleitet.

Drei Gruppen, sechzig Varianten. Eine vierte Gruppe mit drei Werten würde die Anzahl auf 180 erhöhen.
| Attributgruppen | Werte in jedem | Erstellte Kombinationen |
| 2 (Größe, Farbe) | 5 und 4 zur Verfügung | 20 |
| 3 (Größe, Farbe, Material) | 5, 4 und 3 | 60 |
| 4 (Größe, Farbe, Material, Ausführung) | 5, 4, 3 und 3 | 180 |
| 4 (wie in Ausgabe Nr. 12915 berichtet) | 19, 8, 8 und 3 | 3,648 |
Fügt man eine weitere Dreiergruppe hinzu, verdreifacht sich die Summe. Nicht plus drei, sondern mal drei. Dieser einzelne Punkt ist für die meisten Händler ein Fehler in der PrestaShop-Kombinationsverwaltung.

Wichtig zu wissen, bevor Sie auf „Generieren“ klicken: Die Plattform setzt kein Limit . Der Generator ist rekursiv und liefert Kombinationen nacheinander, ohne dass in der Klasse ein Maximum definiert ist.
3.0 Was die Datenbank beim Generieren von Kombinationen macht
Eine einzelne Kombination entspricht niemals einer einzelnen Reihe. Ganz im Gegenteil. Genau dieses Detail übersehen viele, wenn sie einen überladenen Katalog betrachten und sich fragen, woher diese Größe kommt.
Wird eine Kombination generiert, schreibt PrestaShop in fünf separate Tabellen:
- Produktattribut enthält die Kombination selbst, mit ihrem Referenzwert und ihrer Preiswirkung.
- Shopspezifische Preis- und Lagereinstellungen werden übernommen. Produktattribute Shop, eine Reihe pro Geschäft.
- Produktattributkombination verknüpft die Kombination mit ihren Attributwerten. Entscheidend ist, dass dies eine Zeile pro AttributEine Kombination aus vier Attributen erzeugt also allein vier Zeilen.
- Stock wohnt in stock_availablewiederum pro Geschäft.
- Schließlich haben product_attribute_lang speichert die Verfügbarkeitsbezeichnungen, eine Zeile pro Sprache.

Fünf Tabellen pro Kombination, von denen zwei mit der Anzahl Ihrer Attribute und Sprachen skalieren.
Führen Sie nun die Berechnung für dieses Produkt mit 3,648 Kombinationsmöglichkeiten durch, unter der Annahme von vier Attributen, zwei Sprachen und einem Shop. Sie erhalten 3,648 Zeilen für das Produktattribut, weitere 3,648 für das Produktattribut Shop, 14,592 für das Produktattribut Kombination, 3,648 für die Verfügbarkeit und 7,296 für das Produktattribut Sprache. Das sind insgesamt 32,832 Zeilen für ein einzelnes Produkt.
Multipliziert man das mit 30 Produkten, kommt man auf fast eine Million Zeilen. Der Händler in der betreffenden Ausgabe berichtete von über 100,000 Zeilen, was ihn eher zu den konservativen Schätzungen zählt.
Sprachen und Shops multiplizieren die Gesamtzahl erneut, daher verursacht die Verwendung von drei Sprachen in zwei Shops keinen nennenswerten Mehraufwand für die Produktvariantenverwaltung in PrestaShop . Einige dieser Zählungen multiplizieren sich sogar direkt.
4.0 PrestaShop-Kombinationsleistung für große Kataloge
Speicherplatz ist günstig, und eine Million Zeilen sind für eine Datenbank ein Klacks. Warum also wurden diese Produktseiten so stark gecrawlt?
Die Antwort liegt im Front-Office-Controller und ist spezifischer als allgemeine Langsamkeit.
Öffnet man als Kunde eine Produktseite, ruft PrestaShop die Funktion `getAttributesGroups()` ohne Filter auf und beschränkt die Ergebnisse auf die angezeigte Kombination. Alle 3,648 Kombinationszeilen für dieses Produkt werden zurückgegeben – und zwar bei jedem Seitenaufruf, noch bevor der Besucher etwas angeklickt hat.
Dann wird es teurer. Der Controller durchläuft diese Zeilen und ruft für jede Kombination `Product::getPriceStatic()` auf, um zu ermitteln, ob ein bestimmter Preis gilt. Fast viertausend Preisberechnungen, jede mit eigener Steuer- und Rabattlogik, werden durchgeführt, um eine einzige Seite darzustellen.

Hier hängt nichts davon ab, was der Besucher auswählt. Die Arbeit findet so oder so statt.
Den Entwicklern von PrestaShop ist das Problem bekannt. Direkt über dieser Abfrage im Quellcode von Version 8.2.6 findet sich ein Kommentar eines Kernentwicklers, der fragt, ob der Code nur die Gruppen anstatt aller Varianten abrufen soll. Diese Frage ist seit Jahren im Code vorhanden.
Aus dieser Konstruktion ergeben sich zwei praktische Konsequenzen:
- Die Seitenladezeit skaliert mit der Anzahl der Kombinationsmöglichkeiten, nicht mit der tatsächlichen Auswahl des Kunden. Ein Produkt mit 3,600 Varianten lädt selbst für einen Besucher, der die Seite sofort wieder verlässt, langsam.
- Spezifische Preisregeln verschlimmern das Problem, da jede einzelne Regel zusätzlichen Aufwand in einer Schleife verursacht, die bereits tausendfach durchlaufen wird. Dies ist die größte Falle in PrestaShop-Großkatalog-Kombinationsverwaltung.
Wichtig zu wissen: Ein Shop ohne Kombinationen überspringt die Abfrage komplett, da Combination::isFeatureActive() frühzeitig zurückkehrt.
5.0 Wie man Tausende von Produktkombinationen in PrestaShop verwaltet
5.1 Reduzieren Sie die Attributanzahl, bevor Sie etwas anderes tun
Jede Gruppe, die Sie entfernen, teilt Ihre Gesamtzahl, daher ist dies die Änderung mit der größten Auswirkung, und sie kostet technisch gesehen nichts.
Stellen Sie für jede Gruppe eine direkte Frage: Würde ein Kunde den Kauf ablehnen, wenn er dies nicht auswählen kann? Oberflächenbeschaffenheit, Verpackungsart und Fadenzahl fallen bei diesem Test in der Regel durch. Verschieben Sie diese zu den Produktmerkmalen.
Entfernt man eine Dreiergruppe aus dem Produkt mit 3,648 Kombinationsmöglichkeiten, bleiben 1,216 übrig. Eine Entscheidung, zwei Drittel der Zeilen sind weg.
5.2 Aufteilung in separate Produkte, wenn eine Variante eigentlich ein Produkt ist
Bei echten Varianten eines Artikels sind die Attribute korrekt. Sobald sich die Optionen so stark unterscheiden, dass Kunden separat danach suchen oder Sie unterschiedliche Fotos und URLs wünschen, handelt es sich um separate Produkte mit einer abweichenden Aufmachung.
Einzelne Produkte werden auch besser indexiert, da jedes seine eigene URL und Meta-Beschreibung erhält. Eine Kombination erhält beides nicht.
5.3 Generieren und anschließend massenhaft bearbeiten
Für die Massengenerierung von Produktkombinationen in PrestaShop ist der Generator deutlich effektiver als die manuelle Erstellung von Varianten. Generieren Sie das komplette Set und löschen Sie anschließend die nicht benötigten Artikel – das ist der Kern der Massenproduktkombinationsverwaltung in PrestaShop . Während der Generierung deaktiviert PrestaShop bestimmte Preisregeln und wendet sie am Ende in einem einzigen Durchlauf an. Daher ist der erste Durchlauf schneller als erwartet.
Das erneute Generieren eines bestehenden Datensatzes verhält sich anders. Vor der Erstellung jeder Kombination fragt PrestaShop die Datenbank ab, um zu prüfen, ob diese Attributpaarung bereits existiert. Tausende von Kombinationen, Tausende von Abfragen. Daher fühlt sich ein zweiter Durchlauf deutlich langsamer an als der erste.
5.4 Wenn eine Kombination das völlig falsche Werkzeug ist
Das Entfernen von Attributgruppen wirft eine naheliegende Frage auf: Was geschieht mit der gerade entfernten Option? Manchmal wird sie zu einem Feature. Manchmal passt keine von beiden.
Gravurtext, ein Monogramm, ein Liefertermin, ein hochgeladenes Logo. Keines davon kann kombiniert werden, da eine Kombination eine endliche Liste von Werten erfordert, die im Voraus definiert werden müssen.
Diese gehören in ein benutzerdefiniertes Produktfeld, das PrestaShop als Anpassung bezeichnet:
- Eine Kombination ist endlich, im Voraus definiert und beinhaltet Lagerbestände. Jede Kombination kostet Zeilen über fünf Tabellen.
- Vom Kunden geöffnet und ausgefüllt: Das benutzerdefinierte Feld beansprucht keinen Platz in Ihrem Lagerbestand und kostet bei Produkten mit 3 Varianten genauso viel wie bei Produkten mit 3000 Varianten.
Die beiden arbeiten zusammen. Ein T-Shirt kann Größe und Farbe als Kombinationen enthalten und gleichzeitig einen gedruckten Namen als benutzerdefiniertes Feld aufnehmen, und beides wird in der Bestellzeile angezeigt.
Eine Sache sollte man vorab wissen: PrestaShop identifiziert Warenkorbpositionen anhand von Produkt und Kombination. Zwei Kunden, die dieselbe Tasse mit unterschiedlicher Gravur bestellen, würden daher in einer einzigen Position mit der Menge zwei zusammengefasst. Module, die dieses Problem beheben, überschreiben die Methoden `Cart::updateQty` , `Cart::getProducts` und `Cart::deleteProduct` und verwenden anschließend einen Hashwert der übermittelten Werte, um die Positionen zu trennen.
5.5 Zwei Probleme, die erst nach der Bestellung auftreten.
Die Bestellung speichert die Kombination im Produktnamen. Wenn eine Bestellung aufgegeben wird, speichert PrestaShop keine Referenz auf die Kombination und sucht sie nicht später nach. Die Kombination wird in den Namen geschrieben und diese Zeichenkette gespeichert, sodass order_detail.product_name schließlich etwas wie „ T-Shirt mit Kolibri-Print (Größe: S – Farbe: Weiß)“ enthält.

Mit jedem Attribut, das Sie für ein Feld festlegen, wird die Zeichenkette um ein Element länger, da jeder Wert und jede Gruppe angehängt wird. Vier Gruppen führen zu einem noch längeren Namen.
Das Problem liegt in der Spaltenbreite, die je nach PrestaShop-Version variiert.
In PrestaShop 1.7 beträgt die Spaltenbreite varchar(255). Version 8 und 9 verwenden MEDIUMTEXT. Außerdem scheint die Größe des varchar-Typs für dieses Feld in Version 1.7 nicht deklariert zu sein; die Länge wird vor dem Einfügen nicht geprüft, sondern von MySQL nach 255 Zeichen abgeschnitten.
Niemand bemerkt einen Fehler. Die Bestellung wird gespeichert, und der Verlust taucht später auf der Rechnung oder in der Bestellliste auf, wo zwei Varianten identisch aussehen können, da das Unterscheidungsmerkmal das abgeschnittene Teil ist. Ein Upgrade auf Version 1.7 oder höher beseitigt diese Begrenzung.
Der Personalisierungstext wird als Zeichenkette an die Bestätigungs-E-Mail übergeben. PrestaShop generiert diesen Text dynamisch in PHP mit dem gewünschten Markup, wobei die Labels innerhalb von <br />-Tags stehen und die Einträge durch <br /> getrennt werden. Die E-Mail-Vorlage gibt den Wert dann ohne Verwendung von markierten sicheren Elementen aus. Da E-Mail-Vorlagen mit aktiviertem Smarty-Escaping ausgeführt werden, werden alle Tags in Entitäten umgewandelt.

Der Kunde liest die Tags, anstatt eine fettgedruckte Bezeichnung und einen Zeilenumbruch zu sehen. Senden Sie sich selbst eine Testbestellung mit einem personalisierten Produkt, da dieselbe Bestellung in der PDF-Rechnung korrekt dargestellt wird, während die E-Mail unformatierte Formatierung anzeigt.
5.6 Beobachten Sie die Entwicklung bestimmter Preise.
Jede einzelne Preisregel verursacht zusätzlichen Aufwand innerhalb dieser Kombinationsschleife. Deshalb fallen einige wenige Regeln bei einem kleinen Katalog kaum ins Gewicht, während sie bei einem großen Katalog das gesamte Problem verursachen. Man denke nur an den Händler in Ausgabe Nr. 12915: Für jede der 3,600 Varianten gab es einen anderen, individuell festgelegten Preis.
Wenn ein Preisunterschied für eine ganze Gruppe gilt, verwenden Sie das Feld „Kombinationspreisauswirkung“ anstelle einer spezifischen Preisregel. Es befindet sich in der Kombinationszeile selbst und verursacht keine zusätzlichen Lesekosten.
6.0 Was hat sich zwischen PrestaShop 1.7 und 9 geändert?
Viele, und die Unterschiede sind wichtig, wenn man einer älteren Anleitung folgt.
In PrestaShop 9 ist die alte Produktseite nicht mehr verfügbar. Die in Version 1.7 eingeführte und in den Versionen 8.x weiterentwickelte, überarbeitete Seite ist nun die einzige Option. Die Entwicklerhinweise zu Version 9.0 bestätigen, dass die alte Seite nicht mehr erreichbar ist. Daher zeigen alle Screenshots in älteren Tutorials eine Benutzeroberfläche, die Ihnen nicht mehr zur Verfügung steht.
Modulautoren müssen mehr prüfen. Alle Hooks, die mit der alten Produktseite verknüpft waren, wurden in Version 9.0 entfernt (die actionAdminProductsController- Familie). Wird einer dieser Hooks für die Kombinationsverarbeitung verwendet? Dann muss das entsprechende Modul neu geschrieben werden.
Zwei weitere Datenänderungen können zu Problemen führen. Das Attribut „price“ wurde aus „Product::getProductProperties“ entfernt , und „features“ sind nicht mehr standardmäßig in „getProductsProperties“ enthalten. Beide Fehler treten ohne Fehlermeldung auf.
In puncto Performance gibt es erfreuliche Neuigkeiten. PrestaShop 9.1 bietet laut den Release Notes eine deutliche Verbesserung der Warenkorb-Performance für Shops mit vielen Produktkombinationen . Betreiben Sie einen umfangreichen Variantenkatalog mit Version 9.0? Allein das rechtfertigt das Upgrade.
Eine Schemaänderung ist wichtig, falls Sie noch Version 1.7 verwenden. Die Spalte order_detail.product_name war dort vom Typ varchar(255) und ist in Version 8 und 9 vom Typ MEDIUMTEXT. Durch das Upgrade wird die oben beschriebene stille Kürzung beseitigt.
Das grundlegende Verhalten hat sich jedoch nicht geändert. Kombinationen bleiben ein kartesisches Produkt, ohne Obergrenze, verteilt auf dieselben fünf Tabellen, und das Zählen vor der Generierung ist bei Version 9 genauso wichtig wie bei Version 1.7.
7.0 Eine praktische Arbeitsordnung
Wenn Ihr Katalog unübersichtlich geworden ist, arbeiten Sie diese Schritte der Reihe nach durch. Die Kurzfassung, wie Sie Produktvarianten in großem Umfang in PrestaShop verwalten.
- Zählen Sie zuerst. Multiplizieren Sie Ihre Attributwerte miteinander, bevor Sie auf „Generieren“ klicken. Wenn Sie bei einem Produkt einige Hundert Werte erreicht haben, sollten Sie innehalten und die Berechnung überdenken.
- Könnte stattdessen eine beliebige Attributgruppe ein Feature oder ein offenes benutzerdefiniertes Feld sein?
- Welche Varianten verdienen eine eigene Produktseite? Alles, was Sie separat in der Suche finden möchten.
- Prüfen Sie die spezifischen Preisregeln für Produkte mit vielen Varianten und ersetzen Sie, soweit möglich, die entsprechenden Werte durch das Feld „Kombinationspreisauswirkung“.
- Geben Sie eine Testbestellung für ein Produkt mit mehreren Attributen und einer individuellen Anpassung auf und lesen Sie anschließend die Bestellzeile und die Bestätigungs-E-Mail. Lange Namen werden in Version 1.7 abgeschnitten, und die E-Mail-Adresse selbst formatiert ihre Formatierung nicht korrekt.
- Nutzen Sie PrestaShop 9.0 mit einem großen Variantenkatalog? Aktualisieren Sie auf Version 9.1, um die Warenkorb-Performance zu verbessern.
8.0 Die Kurzfassung
Die Kombinationsmöglichkeiten vervielfachen sich, und diese Multiplikation wirkt sich schneller auf die Datenbank aus, als die meisten Händler erwarten. Fünf Tabellen pro Kombination. Ein Produkt mit vier Attributen und einigen tausend Varianten kann 30,000 Zeilen umfassen.
Die Performance leidet auf der Produktseite, nicht im Speicher. PrestaShop lädt jede Kombination einzeln und berechnet den Preis für jede einzelne bei jedem Seitenaufruf, unabhängig davon, ob der Besucher das Dropdown-Menü öffnet oder nicht.
Die effektivste Lösung bleibt die einfachste. Weniger Attributgruppen bedeuten exponentiell weniger Kombinationen, daher sollte die Multiplikation vor der Generierung durchgeführt werden.
Danke fürs Lesen.
Haben Sie Fragen zur Performance Ihrer Website oder benötigen Sie Unterstützung bei deren Migration? Unsere Experten helfen Ihnen gerne. Kontaktieren Sie das Knowband-Team noch heute unter [email protected] für zuverlässige E-Commerce-Plugins, die perfekt auf Ihre Bedürfnisse zugeschnitten sind.

