REST API: Artikel-Bilder initial löschen

Hallo, ich beschäftige mich gerade mit der Aktualisierung von Artikeln via REST API, im Detail das Aktualisieren der Bilddaten. Ich habe unter http://wiki.shopware.de/Shopware-4-API- … 0_869.html gesehen, dass man die Bilder mittels Link an Shopware übermitteln kann, welcher die Bilddaten herunterlädt und beim Artikel setzt: ‚images‘ => array( array(‚link‘ => ‚http://lorempixel.com/640/480/food/‘), array(‚link‘ => ‚http://lorempixel.com/640/480/food/‘), ), Jedoch habe ich folgendes Problem: Der Artikel hat initial ein Bild zugeordnet und wird so zum Shop hochgeladen --> Das Bild wird sauber beim Artikel hinterlegt. Nun ändert sich das Bild zum Artikel, dementsprechend ändert sich der Link zum Bild und ich fahre einen Abgleich mit dem Shop --> Das Bild wird nun zusätzlich zum initial vorhandenen angezeigt, obwohl ich im „images“ Array nur das eine Bild übergeben habe. Wie es scheint, identifiziert der Shop anhand der URL, ob ein Update oder ein Create durchgeführt werden soll. Nun meine Frage: Kann man den Shop „zwingen“, initial alle Bildzuordnungen zu löschen, damit nur die übergebenen Links gesetzt werden? Bzw. gibt es einen anderen Lösungsansatz, um die Bilder beim Artikel zu setzen? Eventuell über die Media-Ids? Oder verhält es sich dort ähnlich zu der Link-Systematik? Über eine Antwort würde ich mich sehr freuen! Vielen Dank!

hi, mit folgender Funktion lösche ich beim import/update immer alle Artikelbilder wenn neue Bilder vorhanden sind. Vielleicht hilft das… public function deleteArticleImages($articleID) { $articleID = (int)$articleID; if (empty($articleID)) { return false; } $articleRepository = $this-\>getArticleRepository(); $result = $articleRepository-\>getArticleImagesQuery($articleID)-\>getResult(); foreach ($result as $imageModel) { Shopware()-\>Models()-\>remove($imageModel); Shopware()-\>Models()-\>remove($imageModel-\>getMedia()); } Shopware()-\>Models()-\>flush(); return true; }

1 „Gefällt mir“

Vielen Dank für die Antwort! Was mir nur noch nicht ganz klar ist: An welcher Stelle würde ich diese Funktion aufrufen? Für den REST API Artikelabgleich mache ich ja lediglich einen PUT/POST an die url/api/articles und dort besteht keine Möglichkeit, abweichende Programmlogik aufzurufen. Muss ich hier die API um eine eigene Resource erweitern, um die Funktion aufrufbar zu machen oder wie ist hier vorzugehen?

naja, du müsstest halt vorher prüfen ob der Artikel schon existiert und ob ggf. neue Bilder importiert werden sollen und dann entsprechend reagieren. //update article if already exists. otherwise create. $getArticleIdSql = "SELECT `articleID` FROM `s_articles_details` WHERE `ordernumber`=?"; $articleID = Shopware()-\>Db()-\>fetchOne($getArticleIdSql, $articleParams['mainDetail']['number']); if (!empty($articleID)) { if(isset($articleParams['images'])){ self::deleteArticleImages($articleID); } $this-\>articleResource-\>update($articleID,$articleParams); }else{ $this-\>articleResource-\>create($articleParams); }