hi, ich versuche mich gerade daran Varianten-Artikel via API zu importieren. Soweit klappt es auch. Die Artikel werden inkl. Varianten angelegt. Leider bleiben die Optionen inaktiv so dass die Varianten im Frontend auch nicht angezeigt werden. Die Daten für den Artikel sehen in etwa so aus: Array ( [name] =\> Artikelname [descriptionLong] =\> [active] =\> 1 [description] =\> [mainDetail] =\> Array ( [number] =\> 20740 [inStock] =\> 1 [active] =\> 1 [prices] =\> Array ( [0] =\> Array ( [customerGroupKey] =\> EK [price] =\> 589.00 [pseudoPrice] =\> [baseprice] =\> 337.25 ) ) [referenceUnit] =\> 1 [attribute] =\> Array ( [attr6] =\> 20740 ) ) [tax] =\> Array ( [tax] =\> 19.00 [name] =\> 19% ) [supplier] =\> Herstellername [categories] =\> Array ( [1758] =\> Array ( [id] =\> 1758 ) ) [configuratorSet] =\> Array ( [name] =\> Textil [groups] =\> Array ( [0] =\> Array ( [name] =\> Größe ) [1] =\> Array ( [name] =\> Farbe ) ) ) )
Anschliessend erstelle ich die Variante: Array ( [articleId] =\> 1474 [number] =\> 310678 [inStock] =\> 1 [active] =\> 1 [additionaltext] =\> 42 / bunt [prices] =\> Array ( [0] =\> Array ( [customerGroupKey] =\> EK [price] =\> 589.00 [pseudoPrice] =\> [baseprice] =\> 337.25 ) ) [configuratorOptions] =\> Array ( [0] =\> Array ( [group] =\> Größe [option] =\> 42 ) [1] =\> Array ( [group] =\> Farbe [option] =\> bunt ) ) )
Wie schon erwähnt, alles wird soweit korrekt angelegt. nur leider sind die options inaktiv. Wenn ich sie im Backend händisch aktiviere ist alles bestens. Im Wiki habe ich folgenden Satz gefunden: “Nicht angegebene Gruppen und Optionen werden inaktiv gesetzt und die entsprechenden Artikel im Frontend nicht mehr angezeigt.” Was mache ich falsch? Warum werden die Optionen nicht aktiviert? vielen Dank.
ok, ich habe das ganze jetzt noch mal umgestellt und hab mich an diesen Wiki-Eintrag gehalten. Hier wird erst der Standardartikel angelegt und dann über ein Update die Varianten hinzugefügt. Der Standardartikel wird angelegt, wenn ich dann aber die Varianten hinzufügen will bekomme ich folgenden Fehler geschmissen: [quote] An exception occurred while executing ‘INSERT INTO s_article_configurator_options (group_id, name, position) VALUES (?, ?, ?)’ with params [28, “bunt”, 0]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘28-bunt’ for key ‘group_id’ in Shopware/Components/Api/Resource/Resource.php on line 260 [/quote] Die Tabelle s_article_configurator_options ist bei mir leer. Ich wäre wirklich sehr dankbar wenn mir jemand auf die Sprünge helfen könnte wie ich über die API Konfiguratorartikel erstellen kann. Vielen Dank und viele Grüße
so, ich bin nun auf diesen Fix gestoßen und habe die aktuelle /engine/Shopware/Components/Api/Resource/Variant.php von Github eingespielt. Leider keine Veränderung. Ich bekomme immer noch den gleichen Fehler. Was mich auch etwas verwundert, ist dass die Tabelle s_article_configurator_options bei mir leer ist. Warum wird dann „Duplicate entry ‚50-bunt‘ for key ‚group_id‘“ angemeckert?
Ich habe das gleiche Problem. Hier scheint der importer einen großen Bug zu haben, denn es wird versucht ein Eintrag in s_articles_configurator_options anzulegen, der von einem vorherigen Artikel in dieser kombinationr schonmal angelegt wurde und dadurch nicht mehr unique ist… Jemand hierfür schon nen fix? (4.3)
Ich habe genau das selbe Problem und wäre für eine Lösung sehr dankbar! Grüsse Urs
hat hier schon jemand eine Lösung gefunden?
Hi, bitte kontrolliere einmal ob du beim Artikel anlegen im dem Array Key “configuratorSet” nicht nur die Gruppen angibst sondern auch die Optionen jeder Gruppe die angelegt werden sollen. Diese müssen beim anlegen des Konfigurator Sets mit übergeben werden um sicher zu stellen dass bei Varianten nicht einfach irgendwelche Optionen hinzugefügt werden die im Set gar nicht definiert sind. Das array müsste dann etwa so aussehen 'configuratorSet' =\> array( 'groups' =\> array( array( 'name' =\> 'Größe', 'options' =\> array( array('name' =\> 'S'), array('name' =\> 'M'), array('name' =\> 'L'), array('name' =\> 'XL'), array('name' =\> 'XXL'), ) ), array( 'name' =\> 'Farbe', 'options' =\> array( array('name' =\> 'Weiß'), array('name' =\> 'Gelb'), array('name' =\> 'Blau'), array('name' =\> 'Schwarz'), array('name' =\> 'Rot'), ) ), ) ),
Wichtig ist hier das Verschachtelte “options” array. Sollte das ganze dann immer noch nicht funktionieren, könntest du dir noch die PHP-Unit Tests unter tests/Shopware/Tests/ anschauen. Dort wird oft die RestAPI verwendet um Test-Produkte anzulegen. Hoffe das hilft dir weiter. Gruß Oliver
Hi! Den oben erwähnten Fix habe ich damals geliefert, der war bezüglich Varianten sowieso nötig, das war schonmal gut! Dein Problem von oben habe ich bei uns ebenfalls selbst gelöst, und auch im Jira schon länger gemeldet … Das Problem ist, dass nicht case-sensitive das ganze behandelt wird bezüglich Optionen. Bedeutet, die Eigenschaft “Blau” existiert z.B. bereits und Du versuchst “blau” zu hinterlegen. Das wird aber im Core nicht erkannt und deswegen versucht anzulegen. Genau dabei entsteht der Fehler, da die Spalte unique ist und “blau” nicht angelegt werden kann. Im Jira findet man meinen Eintrag: Jira-Link Unter den Kommentaren habe ich (meinen) persönlichen Fix ebenfalls geteilt. Geht darum, dass ich versuche selbst die Option vorher zu suchen. Und mit der Hilfsfunktion kann diese definitiv gefunden werden. Wenn die auffindbar ist übergebe ich eben nicht den Optionstitel, sondern direkt die ID. protected function getOptionId($optionName, $groupName) { try { $groups = Shopware()-\>Models()-\>getRepository('Shopware\Models\Article\Configurator\Group')-\>findBy(array('name' =\> array($groupName))); foreach ($groups as $group) { $groupOptions = $group-\>getOptions(); foreach ($groupOptions as $groupOption) { if (strtolower($groupOption-\>getName()) == strtolower($optionName)) { return $groupOption-\>getId(); } } } } catch (\Exception $e) { /\*\* \* the group doesnt exist \*/ } }
Damit klappt das bei uns wunderbar. Du umgehst eben das Problem, da Shopware in den Resourcen nicht selbst die Variante versucht zu finden, da Du direkt die Option ID angibst. Viel Erfolg und schöne Grüße Niklas