Jump to content
xt:Commerce Community Forum
Sign in to follow this  
Crafter

xt Commerce API - Probleme beim hinzufügen von Bildern

Recommended Posts

Hallo zusammen,

leider habe ich ein Problem beim Image upload mithilfe der API. Ich verwende die setMedia Funktion aus der Dokumentation:

{
"function":"setMedia",
"paras":{
    "user":"",
    "pass":"",
    "link_id":"",
    "isLinkExternal":"",
    "className":"",
    "mediaItem":{
        "filename":"",
        "filedata":"",
        "mediatype":""
    }

}}

filedata erstelle ich mithilfe der php base64_encode funktion:

$image = base64_encode($imageData);

Mit Daten gefüllt sieht das ganze so aus:

{
"function":"setMedia",
"paras":{
    "user":$user,
    "pass":$pass,
    "isLinkExternal": 0,
    "className":"attribute",
    "mediaItem":{
        "filename":"test.jpg",
        "filedata": $image,
        "mediatype":"image"
    }

}}

Bei className bin ich mir unsicher welche Angabe die richtige ist und bei link_id ist mir nicht klar welcher Wert verlangt wird, aber es gibt keine Fehlermeldung wenn ich diese weglasse.

Beim Aufruf bekomme ich folgende Antwort:

array(2) {
  ["result"]=>
  bool(true)
  ["message"]=>
  string(7) "SUCCESS"
}

Allerdings wurde das Bild nicht hinzugefügt. Auch in der Datenbank unter xt_media ist kein neuer Eintrag. Was mache ich hier falsch?

Viele Grüße

Share this post


Link to post
Share on other sites

Die sopa-calls sind im grunde wie die DB aufgebaut. Ich kann dir nicht im Detail erklären, was hier richtig wäre weil ich da dran eine Weile nicht mehr selbst entwickelt habe, aber wenn du ein Bild über das Shopbackend hoch lädst und dir dann die Relationen in der Datenbank anschaust, sollte alles klarer werden. 

Share this post


Link to post
Share on other sites

die linkId wird natürlich benötigt, das ist die ID des jeweiligen objekts für welches du das Bild setzen willst. bei "category" z.B. die Kategorie ID, bzw wenn 

isLinkExternal = true

dann die external id

> Bei className bin ich mir unsicher welche Angabe die richtige 

Welches Bild willst du setzen ? Der className unterstützt  'category', 'attribute', 'manufacturer' - Also Kateogrie, Attribute oder Herstellerbild.

Share this post


Link to post
Share on other sites

Ich möchte Bilder für Artikel setzten. Die "setArticle" Funktion hat selbst folgende Attribute welche mit Bildern in Verbindung stehen: 

{
"function":"setArticle",
"paras":{
...
    "productItem":{
...
        "products_image":"",
        "image_name":"",
        "image":"",
        "products_images":[{
                "type":"",
                "id":"",
                "image_name":"",
                "image_data":""
            }        ]    
...
}}

 

Wenn ich bei "products_image" den Namen eines bereits vorhandenen Bildes angebe wird dieses beim Produkt angezeigt. Deshalb wollte ich jetzt das Artikelbild mit der setMedia Funktion hochladen und dann so zuordnen. Lieber wäre es mir das Hauptbild des Produkts und die weiteren Bilder direkt mit der "setArticle" Funktion hinzuzufügen. Allerdings hatte das nicht funktioniert. Wo ist z.B. der Unterschied zwischen "products_image", "image_name", "image" und "products_images"?

 

Nachtrag:

Unabhängig davon welchen Wert ich bei setMedia für "className" angebe (möglich sind laut Doku 'category', 'attribute', 'manufacturer') in der Tabelle xt_media hat die Spalte 'class' immer den Wert category.

Wenn ich bei link_id die ProduktId angebe zu welcher der Eintrag gehören soll, ist die Spalte 'id' in xt_media die link_id. Diese sollte aber automatisch gesetzt werden, da Primary key und AUTO_INCREMENT. Das Bild welches ich im korrekten base64 format (gleiches format wie das welches ich per getImage bekomme) übergebe wird außerdem nicht auf dem Server hochgeladen.

Weiterhin ist mir aufgefallen das 'date_added' auf '0000-00-00 00:00:00' steht, statt des aktuellen Datums. Das gleiche in xt_products bei den über die API hinzugefügten Produkten.

 

 

Share this post


Link to post
Share on other sites

für Artikelbilder gibt es einen eigenen Call: https://xtcommerce.atlassian.net/wiki/spaces/XT41DUE/pages/10256561/setArticleImages+JSON bzw als liste bei mehreren https://xtcommerce.atlassian.net/wiki/spaces/XT41DUE/pages/10256565/setArticleImageList+JSON

der setMedia ist nicht für Artikelbilder.

 

Unabhängig davon welchen Wert ich bei setMedia für "className" angebe (möglich sind laut Doku 'category', 'attribute', 'manufacturer') in der Tabelle xt_media hat die Spalte 'class' immer den Wert category.

Der Bildname muss jeweils anders sein.

Share this post


Link to post
Share on other sites

Das hinzufügen des Bildes mit "setArticleImages" hat nun funktioniert. Allerdings besteht noch immer das Problem das der Wert "date_added" auf "0000-00-00 00:00:00" gesetzt wird. Bei der setArticle Funktion lässt sich dieser per API setzten, bei der setArticleImages funktion wird der Parameter hingegen ignoriert.

Share this post


Link to post
Share on other sites

Beim hinzufügen von Bildern habe ich immernoch ein Problem. Das Hauptbild kann ich problemlos mit setArticleImages hinzufügen. Das hinzufügen von weiteren Bildern funktioniert aber garnicht:

	$data = array(
    "function" => "setArticleImages",
    "paras" => array(
        "user" => $user,
        "pass" => $pass,
        "product_model" => $productsModel,
        "images" => array(
            "products_id" => $products_id,
            "image_name" => $imageName,
            "image" => $image,
            "products_images" => array(
                "products_id" => $products_id,
                "image_name" => $imageName2,
                "image" => $image2
            ),
        )
    )
);
	

Führt dazu das zwar ein zweites Bild hinzugefügt wird. Dieses wird aber dann im Shop nur als "nicht vorhanden" angezeigt. Es ist anklickbar aber statt des Bildes wird nur das "kaputte" Bildzeichen angezeigt.

 

Auch setArticleImagesList führt nicht zum erfolg:

	$data = array(
    "function" => "setArticleImagesList",
    "paras" => array(
        "user" => $user,
        "pass" => $pass,
        "images" => array(
            "products_id" => $products_id,
            "product_model" => $productsModel,
            "image_name" => $imageName2,
            "image" => $image2
        )
    )
);
	 
	

Führt zu folgender Fehlermeldung:

array(4) {  [0]=>  array(3) {    ["products_model"]=>    NULL    ["result"]=>    bool(false)    ["message"]=>    string(62) "FAIL product not exists externalID: productsModel: productsID:"  }  [1]=>  array(3) {    ["products_model"]=>    string(1) "T"    ["result"]=>    bool(false)    ["message"]=>    string(64) "FAIL product not exists externalID:T productsModel:T productsID:"  }  [2]=>  array(3) {    ["products_model"]=>    string(1) "1"    ["result"]=>    bool(false)    ["message"]=>    string(64) "FAIL product not exists externalID:1 productsModel:1 productsID:"  }  [3]=>  array(3) {    ["products_model"]=>    string(1) "/"    ["result"]=>    bool(false)    ["message"]=>    string(64) "FAIL product not exists externalID:/ productsModel:/ productsID:"  }}
	

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...