Eine Produktvariante über die Api richtig anlegen

ich habe erneut das Problem, das ich eine Produktvariante über die api wie swagger create product anlege indem ich die parentId des Produkts mitgebe und die options. Im Backend sieht es soweit auch gut aus. im Frontend ergibt sich bei der Detailansicht jedoch folgender Fehler:

Argument 1 passed to Shopware\Storefront\Page\Product\Configurator\ProductPageConfiguratorLoader::sortSettings() must be of the type array, null given

im backend wenn man unter Varainte  auf den Button Variante generieren klcikt sieht man jedoch, dass die bereits gewählten optionen nicht angezeigt als 1 option ausgewählt

 

 

habe es gefunden:

es reicht nicht das Produkt über  post product mithilfe der parentId und der options anzulegen. es muss zudem auch die configuratorSettings mit den options übergeben werden:

{
  „productId“: „c0cb50491b944bc4a955a01371a2edd5“, // parentId des Elternprodukts
  „optionId“: „cb4602f1647040c985cd30fdc011e4cf“

@stephanie_schuessler schrieb:

 

habe es gefunden:

es reicht nicht das Produkt über  post product mithilfe der parentId und der options anzulegen. es muss zudem auch die configuratorSettings mit den options übergeben werden:

{
  „productId“: „c0cb50491b944bc4a955a01371a2edd5“, // parentId des Elternprodukts
  „optionId“: „cb4602f1647040c985cd30fdc011e4cf“

Hallo Stephanie!

Ich hänge aktuell auch in den Varianten und komme leider nicht weiter.
Ich habe die parentId, options (bestehend aus einer liste von productId, id und groupId) und die configuratorSettings (bestehend aus einer liste aus productId, optionId) der Variante mitgegeben. In der DB sieht es soweit in Ordnung aus, was kracht: Wenn ich „Varianten generieren“ klicke werden die Optionen nicht ausgewählt die bereits gesetzt sind, Storefront Vorschau und die Storefront selbst.

Hast Du noch weitere Ideen, was nicht passen kann? …

Schöne Grüße,
Niklas

Hallo Niklas,

du musst zusätzlich noch die configuratorSettings setzen wie z.B.:

    “configuratorSettings”: [{
        “optionId”: “164ec683e30040689e46d75276d0b5eb”
    },
    {
        “optionId”: “ee089938faa94238971beaa0c49c348e”
    }]

 

sonst legt er zwar die Varianten an aber die Zuordnung ist nicht vollständig, was dazu führt, daß im Frontend bei der Detailansicht eine Fehlermeldung kommt

Grüße

Stephanie

Hallo Stephanie,

Danke für’s Zeit nehmen! Habe ich aber (leider) schon so gemacht:

{   
   ...
   "parentId":"3ed4c00c027a4abfbd8e4a5a89de683f",
   "options":[ 
      { 
         "productId":"a166c111de40437082408d2eb4509f5a",
         "id":"a5b43bd3908f47dbbda3a1a6d8ade427",
         "group":{ 
            "id":"f89d61e209a54d14946ce1a12726d173"
         }
      }
   ],
   "configuratorSettings":[ 
      { 
         "optionId":"a5b43bd3908f47dbbda3a1a6d8ade427"
      }
   ]
}

Wie geschildert kann man im admin die Vorschau und Auswahl nicht ausführen, das Frontend kracht mit folgender Meldung:

ProductPageConfiguratorLoader::sortSettings() must be of the type array, null given

Das zeigt, dass er anscheinend den configurator nicht finden kann (https://github.com/shopware/platform/blob/fb4bc791e185512bfde8cd0ea462b0cf527cf82f/src/Storefront/Page/Product/Configurator/ProductPageConfiguratorLoader.php#L84)

Schöne Grüße!
Niklas

Hallo Niklas,

sorry die configuratorSettings musst du über

/api/v1/product-configurator-setting

separat setzen sonst geht es nicht. Laut swagger kann am es zwar mitgeben, aber das will nicht so recht. Der body wäre dann:

{
  „productId“: „c0cb50491b944bc4a955a01371a2edd5“,
  „optionId“: „cb4602f1647040c985cd30fdc011e4cf“
}

1 Like

Also bei mir hat es nun geklappt, indem ich das configuratorSettings-Array beim Hauptprodukt und dann bei den Varianten das options-Array angegeben habe. Mehr musste ich nicht machen.

Hauptprodukt:

[
	'configuratorSettings' => [
		[
			'optionId' => '71c2e8548c22475c8871e85b2f61a2f4' # Option
		]
	]
]

Variante:

[
	'parentId' => $parentId, # Hauptprodukt
	'options' => [
		[
			'id' => '71c2e8548c22475c8871e85b2f61a2f4' # Option
		]
	]
]

 

Es gibt im Quellcode ein Test-Script welches für mich ein gutes Beispiel war:

https://github.com/shopware/platform/blob/6.1/src/Core/Content/Test/Product/DataAbstractionLayer/Indexing/VariantListingIndexerTest.php

hat hier jemand einen Tipp, wie ich Varianten mit “mehrdimensionalen” Options anlege?

Eindimensional war das ja kein Thema … aber wie gehts wenn ich Varianten aus mehreren Options bauen möchte? Da streikt mir grad mein logisches Denken …

Beispiel: Varianten bilden aus Farbe (gelb, rot, blau), Größe (S, M, L) und Kragenform (V-Kragen, Rundkragen).

muss ich mich dann selbst um die erstellung der Matrix kümmern? Oder kann ich Shopware irgendwie einfach nur alle Options mitgeben und es generiert die Varianten selbst?

Dafür musst Du dem Produkt die entsprechenden Optionen mitgeben.

[
	'parentId' => $parentId, # Hauptprodukt
	'options' => [
		[
			'id' => '71c2e8548c22475c8871e85b2f61a2f4', # Option 1 = Farbe
			'id' => '12345678901234567890123456789012', # Option 2 = Größe
			'id' => '12345678901234567890123456789013', # Option 3 = Kragenform
		]
	]
]

Aber eine Option, dass Du über die Schnittstelle beliebig viele Produkte (mit diversen Optionen) anlegst ist mir nicht bekannt. Das geht nur über die Admin-Page. Über die API musst Du jedes Produkt einzeln erzeugen. So habe ich das gelöst.

Hallo zusammen, anlegen funktioniert soweit. Aber wie kann man die zuordnung über die API wieder entfernen? Parentid leer lassen hilft nicht.

Hallo,
auch ich stehe vor dem gleichen Problem.
Weiß jemand, wie man die Zuordnung wieder entfernen kann?
Danke!

Hallo zusammen,
Optionen oder Eigenschaften u.a. kann man über die sync api löschen </api/_action/sync>.
Hier ist eine Doku dazu:

Ich hoffe das hilft weiter.

Ja, hiermit hat es funktioniert:

// POST /api/_action/sync
{
	"delete-product-property": {
		"entity": "product_option",
		"action": "delete",
		"payload": [
			{
				"productId": "233baf9ff8ba4acc911dfb62fc7211e3",
				"optionId": "63156ca39b75440b861493674cbc4766"
			}
		]
	}
}

Danke!