hallo, per rest-api wird das produkt korrekt angelegt, die coverId wird nur parziell umgesetzt. payload (auszug): { "id": "bdff2530a7fb49519378c5f06f321682", "coverId": "727d8eefa41c44e190021730893f2ec2", "media": [{ "id": "bdff2530a7fb49519378c5f06f321682", "mediaId": "727d8eefa41c44e190021730893f2ec2", "position": 1 }] }
im admin-bereich wird das bild korrekt angezeigt und als “Cover” gekennzeichnet, wurde aber dem Cover nicht zugewiesen:
im frontend wird das bild im listing nicht angezeigt, auf der detailseite erscheint das bild korrekt.
aufgrund eines bestehenden fehlers in der doku von shopware 6, wird das bild nicht richtig zugewiesen:
payload (auszug):
{
„id“: „bdff2530a7fb49519378c5f06f321682“,
„coverId“: „cdfb2479a7fb49519378c5f06f321682“,
„media“: [
{
„id“: „cdfb2479a7fb49519378c5f06f321682“,
„mediaId“: „727d8eefa41c44e190021730893f2ec2“,
„position“: 1
}
]
}
die mediaId ist die falsche - die id des dem produkt zugeordneten bildes muss hier verwendet werden.
3 „Gefällt mir“
Ich denke, ich bin gerade an dem gleichen Problem. Und folgendes habe ich dazu herausgefunden:
Es gibt Medias
Es gibt Products
Diese haben offenbar eine n:m-Beziehung zueinander
→ Es gibt also eine Zwischentabelle und demnach ein Zwischenobjekt Product_Media
Die coverId bei Product ist keine Media-ID, sondern eine Product_Media-ID
Man muss also ein Product_Media-Objekt erstellen, um die Media mit Products zu verknüpfen
Dieses Product_Media-Objekt hat 3 Pflichtfelder: productId, mediaId, createdAt
Wurde dieses Zwischenobjekt erstellt, kann man dessen product_mediaId in dem Product bei coverId hinterlegen
Ich hoffe meine Erkenntnisse können bei diesem Problem weiterhelfen.
2 „Gefällt mir“
pka
21. September 2023 um 10:00
4
Hallo zusammen.
Ich schlage mich auch gerade mit dem Upload von Produktmedien herum. Das Bild wird hochgeladen und auch im Produkt als Bild angezeigt.
Wie bekomme ich das Coverbild nun gesetzt? Ich werde aus der Doku an dieser Stelle nicht schlau.
Vorgehensweise:
Erstellung einer neuen Media-Resource auf /api/media (um eine MediaID zu erhalten)
Upload der Bilddatei auf /api/_action/media/#MediaId #/upload…
Erstellung Produkt-Media auf /api/product-media mit Body:
{
„productId“: „#ProductId #“,
„mediaId“: „#MediaId #“
}
Was muss ich nun tun, um auch das Coverbild zu setzen? Geht das in einem Rutsch in meinem 3. Schritt oder muss ich das hinterher irgendwie machen?
Ich würde mich sehr über einen Tipp und/oder einen Codeschnipsel freuen.
Danke sehr.
LG
Philip
pcs
30. September 2023 um 20:09
5
Ich hab dazu gerade ein lösung gefunden…
mediaID erstellen
/api/media?_response=basic' , [
'body' => '{
"mediaFolderId": "25dbd0da24504e27a60cc45be4eebc8f",
"title": "'.$catid[brand_name].' '.$catid[products_name].' ",
"alt": "'.$catid[brand_name].' '.$catid[products_name].' "
}',
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' => 'application/json'
]
]
dann file hoch laden
/api/_action/media/'.$mediaID.'/upload?extension='.$file_type.'&fileName='.$catid[products_image].'&_response=basic' ,
[
'body' => ' {"url":"'.$img.'"} '
,
'headers' => [
'Accept' => ' application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' =>'application/json'
]
]
dann Image und Produkt nach wahl vernknpüfen.
/api/product-media?_response=detail' , [
'body' => '{
"productId": "'.$catid[products_uuid].'",
"mediaId": "'.$mediaID.'",
"position": 0
}',
'headers' => [
'Accept' => ' application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' => 'application/json'
],
]
Da bekommt na dann eine neue ID … die id dann an die coverID senden…
/api/product/'.$catid[products_uuid].'?_response=basic' , [
'body' => '{
"coverId" : "'.$products_media_id.'"
}
',
'headers' => [
'Accept' => ' application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' => 'application/json'
],
]
thats it… geht bestimmt noch komplizierter… für dich nach Welt!
1 „Gefällt mir“
Nico2
15. Juli 2024 um 13:47
6
Danke! Ist aber wirklich extra kompliziert. Wenn man da einige tausend Artikel anlegt, dauert das ja ewig und drei Tage, wenn man alle für die Bilder 3 API Calls machen muss
pcs
23. Juli 2024 um 15:06
7
geht eigentlich ganz fix…
man kann die header-Antwort von @pcs auch umgehen und seine eigene id mitschicken
Also statt:
/api/product-media?_response=detail' , [
'body' => '{
"productId": "'.$catid[products_uuid].'",
"mediaId": "'.$mediaID.'",
"position": 0
}',
'headers' => [
'Accept' => ' application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' => 'application/json'
],
]
macht man:
/api/product-media?_response=detail' , [
'body' => '{
"id :" md5(loremipsum),
"productId": "'.$catid[products_uuid].'",
"mediaId": "'.$mediaID.'",
"position": 0
}',
'headers' => [
'Accept' => ' application/json',
'Authorization' => 'Bearer '.$shopwareConnector[token]->access_token,
'Content-Type' => 'application/json'
],
]