REST-API: Artikelbild löschen

Da man Artikelbilder über die API nicht selektiv entfernen kann versuche ich als Workaround zunächst alle Bilder zu entfernen: $articleResource = \Shopware\Components\Api\Manager::getResource('Article'); $articleResource-\>update(246, array( 'images' =\> array() )); und anschließend die Bilder über einen weiteren update-call wieder reinzuschreiben. Da das Hauptbild meistens identisch bleibt entsteht hier folgendes Problem: Beim Löschen der Bilder bleiben die Bilder in media/images/ liegen. Setze ich nun wieder ein Bild was schon existierte erkennt Shopware, dass ein Bild mit diesem Namen bereits existiert und hängt einen Hash an das neu zu schreibende Bild. Das Original-Bild liegt als Leiche weiter rum. Wenn man den Artikel über die Zeit öfter aktualisiert entsteht dadurch ein riesen Haufen an alten, unbenutzten Bildern. Wie kann man das umgehen?

Hallo oli, über den Artikel ist das nicht möglich, weil ja mehrere Artikel ein Bild teilen können und es daher erstmal nicht wünschenswert ist, wenn ein Bild gelöscht wird, bloß weil ein gegebener Artikel das Bild nicht mehr verwendet. Gelöscht werden die Bilder allerdings über die Media-Resource. Die entsprechende mediaId erfährst du über die Artikel-Resource - dort findest sie sich im “images” Array. Danach müsstest du noch wie bisher die Bild-Artikel-Zuordnung entfernen. Sicher noch etwas umständlich, da müssten wir mal überlegen, ob wir das besser über eine dedizierte ArtikelImage-Resource o.ä. lösen können. Bis dahin kann ich dir diesbezüglich auch die alte APIempfehlen. Dort wird aus Kompatiblitätsgründen auch direkt das Bild gelöscht, wenn man es für einen Artikel entfernt. Mit den Methoden sDeleteArticleImages und sDeleteOtherArticleImages solltest du daher gut arbeiten können. Daniel /edit: Über unseren Bug-Trackerkannst du das auch als Feature-Wunsch vorschlagen. Dann hast du direkt im Blick, wenn da was passiert.

Wie ist hier der aktuelle Stand? Ich habe durch einen entsprechenden API-Call die Mediendaten der Artikelbilder gelöscht DELETE /media/{id}. Die Bilder sind nun aus der Medienbibliothek entfernt. Anschließend schreibe ich per PUT /article/{id} ein komplett neues Bilder-Array in den Artikel. Leider sind jedoch die alten Bilder zumindest noch zugeordnet. Wenn auch nicht vorhanden.

Wie kann ich das Problem umgehen und die Bilder KOMPLETT aus dem Artikel entfernen um dann neue hinzuzufügen?

Ich hänge mich hier mal an. Ich hab das Problem dass ich bei der lokalen Verwendung der REST API beim Update von Artikeln immer neue Artikel hinten an den Artikel anhänge. Ich hab so für einen Artikel locker 30 Bilder definiert durch wiederholte Durchläufe. Was ich hieran nicht ganz verstehe: Der Artikel sollte 3 Bilder haben - lese ich über REST die Images des Artikels aus so bekomme ich auch nur 3 Media IDs raus - sehe ich mir den Artikel aber im Backend-GUI an sehe ich alle zugeordneten Bilder. Gibt es einen anderen Weg über REST wie ich an alle Bilder rankomme? UND: Wie ist die empfohlene Herangehensweise beim Update von Artikeln wenn ich nicht weis ob die Bilder sich geändert haben oder nicht? Nebenher noch eine andere Frage - lässt sich eventuell über so etwas wie Checksummenbildung feststellen ob ein Bild bereits existiert? (Möglich wäre z.B. Kombination aus Checksumme und Dateiname) - so würde sich das Bereinigen der Medienliste wohl auch zu einem großen Teil vermeiden lassen.

Revidiere meinen Post - Die Kombination aus _leerem_ Image Array beim Update und löschen über Media Resource und Media ID hatte den gewünschten Effekt. Rest war PHP bug meinerseits

Hallo, ich habe den gleichen Effekt. Ich habe es nun so versucht: PUT mit www.meineshop.de/api/articles/ArtikelID {„images“: [{}]} Leider werden die zugeordneten Bilder bzw die Zuordnungen zu dem betreffenden Artikel mit der ArtikelID nicht gelöscht. Wie kann ich das bewerkstelligen? Danke und Gruß Marco

[quote=„fiesch“]Revidiere meinen Post - Die Kombination aus _leerem_ Image Array beim Update und löschen über Media Resource und Media ID hatte den gewünschten Effekt. Rest war PHP bug meinerseits[/quote] Hallo delete mit der MediaID kann ich machen, $client-\>call('media/61', ApiClient::METHODE\_DELETE); aber wie geht das löschen über Media Resource ? Danke :slight_smile:

es gibt noch einen weg die Bilder direkt im gleichen API call zu überschrieben auf jeden Fall bei SW5, so spart sich den API call mit leerem image array. Auf der gleichen Ebene wie das images Element kann man ein Element einsetzen: __options_images und dort den Schlüssel replace = True übergeben. Dann werden die Bilder am Produkt ersetzt im Media Manager blieben Sie trotzdem erhalten und müssen über die media API gelöscht werden.

1 „Gefällt mir“

@benjamin.koetting schrieb:

es gibt noch einen weg die Bilder direkt im gleichen API call zu überschrieben auf jeden Fall bei SW5, so spart sich den API call mit leerem image array.

Auf der gleichen Ebene wie das images Element kann man ein Element einsetzen:

__options_images und dort den Schlüssel replace = True übergeben.

Dann werden die Bilder am Produkt ersetzt im Media Manager blieben Sie trotzdem erhalten und müssen über die media API gelöscht werden.

Vielen Dank für die Info. Wo genau findet man so etwas? In der Rest API Doku ist davon nichts zu sehen. 

zu finden ist das in der Beschreibung zum Merge Mode

https://developers.shopware.com/developers-guide/rest-api/examples/merge-mode/