Aktuell arbeite ich an einer Schnittstelle um Produkte von einem alten fremdem Shop in Shopware zu übertragen. Während der Testphase lösche ich auch immer wieder alle Artikel im SW Shop. Hierzu habe ich mir eine Shopware “Putzfrau” erschaffen, die alles aus dem Shop wieder entfernt. Import und Löschen erfolgt überwiegend über die REST API. Nun das geht auch alles, leider bereiten mir aber die Artikelbilder im Media-Verzeichnis einige Kopfschmerzen.
1.) Über die REST-API können auch Artikel gelöscht werden. Leider werden aber die dazugehörigen Artikelbilder nicht gelöscht. Weder aus der Datenbank noch aus dem Verzeichnis. Wieso wurde das bisher nicht eigebaut? Kann ja sein, dass Artikel auch mal die selben Bilder benutzen können, aber wie oft kommt das in der Realität vor?
2.) Da Punkt 1. gar nicht funktioniert, könnte ich die Datenbank mit “DELETE FROM s_media WHERE albumID = -1” bereinigen. Aber wie zum Geier lösche ich sauber die Verzeichnisse? Leider sind die Media-Order wie z.B. “/media/image/02/f7/c2” sehr sehr sehr ungünstig erstellt worden. Von den Einträgen aus der Datenbank gibt es keinen nachvollziehbaren Bezug auf den Bildpfad. Warum ist das so?
Aktuell benutze ich eine Holzhammermethode und lösche mittels exec() dem kompletten Order “/media/image” und lege danach den Order “thumbnail” wieder an. Zum Testen reicht es allemal, aber eine saubere Lösung wäre hier dennoch mal angebracht. Ich würde es für gut empfinden, wenn man einen Artikel über REST API löscht, dass dann auch alle dazugehörigen Bilder aus der Datenbank und aus dem Verzeichnissen verschwinden.
Wieso wurde das bisher nicht eigebaut? Kann ja sein, dass Artikel auch mal die selben Bilder benutzen können, aber wie oft kommt das in der Realität vor?
Du kannst die Bilder ja auch in Shopseiten, Einkaufswelten oder sonstig eingebunden haben. Artikel und Bilder haben eine n:n Beziehung. Nutze doch einfach den Media-Endpunkt um die Bilder sauber zu löschen. Und danach erst den Artikel.
Der Pfad wird wie folgt erstellt. Shopware geht erstmal davon aus, dass ein Bild in /media/image/ liegt und ein Thumbnail in /media/image/thumbnail. Aus diesem Pfad wird dann ein md5-hash gebildet und die ersten 6 Zeichen werden für den Pfad benutzt.
Habe mal etwas weiter getestet. Im Test-Shop sind die Artikelbilder mit 200x200;600x600;1280x1280 eingestellt. Bei einer Kontrolle im Media-Verzeichnis fand ist aber auch Bilder mit:
…_140x140.jpg
…_140x140@2x.jpg
und weitere mit …@2x.jpg
Also ein einfaches komplettes saueres Löschen ist sehr umfangreich. Allerdings frage ich mich wo die Bilder mit 140x140 herkommen, weil diese Formate bei den Artiklelbilder gar nicht eingestellt sind. Heißt im Umkehrschluss, dass im laufe einer längeren Zeit im Shop Bilder erzeugt werden, die vermutlich gar nicht gebraucht werden.
bei mir sind in Shopware nun einige Artikelbilder hinterlegt, aber auch Bilder in den Einkaufswelten und anderen “Verzeichnissen” im Mediamanager.
Allerdings hat mein media/images Ordner knapp 30GB, was nur irgendwelche Leichen vom Testen sein können. sw:cleanup hat schon gut was gelöscht, aber es ist noch immer viel zu viel an Daten vorhanden. Gerne würde ich einfach den gesamten media/images Ordner löschen und den Import nochmal neu starten, aber das geht ja nicht, weil ja sonst alle meine Einkaufswelten-Bilder, Bilder von Eigenschaften…etc. auch gelöscht werden, oder?