coverId wird beim anlegen des Produktes per REST-API nur parziell umgesetzt

 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“

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:

  1. Erstellung einer neuen Media-Resource auf /api/media (um eine MediaID zu erhalten)
  2. Upload der Bilddatei auf /api/_action/media/#MediaId#/upload…
  3. 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

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!