Bild URL aus Datenbank

Hallo,

weiß zufällig jemand, wie ich an die Bild URL aus der Datenbank komme? Leider finde ich derzeit nichts, wie ich vor dem Dateinamen in der s_articles_img noch an die entsprechenden Ordner davor komme (media/image/x/xx).

Vielen Dank!

Da die URLs ja nicht in der Datenbank stehen, sondern nur das URL-Schema, findest du die Information dort nicht. Es kommt auf den verwendeten Adapter an (bspw. plain, md5, s3, …). Im Standard verwenden wir md5 - dann kannst du die URL per MD5-Hash ermitteln. 

Feld “path” aus s_media: media/image/brot.jpg
MD5 Hash davon: e943a399b17579a7cc8ab810383ebce1 (die ersten 6 Zeichen ergeben den Pfad)
Realer Pfad auf dem Dateisystem: media/image/e9/43/a3/brot.jpg

Bei Thumbnails musst du noch “thumbnail” und den Namen anpassen. Also bspw:

Pfad: media/image/thumbnail/brot_200x200.jpg
MD5: b24bc84cd91a6c01245238a0bd170777
Realder Pfad: media/image/b2/4b/c8/brot_200x200.jpg

Danke für deine Antwort. Wo bekomme ich den MD5 Hash her?

https://www.md5-generator.de/

Versteh ich überhaupt nicht, was soll ich in den Generator eintragen? Die Bildurl? Ich habe tausende davon…

Feld “path” aus s_media: media/image/brot.jpg -----> alles klar, bekommt man aus der Datenbank
MD5 Hash davon: e943a399b17579a7cc8ab810383ebce1 (die ersten 6 Zeichen ergeben den Pfad) ----> woher bekomme ich den für ALLE Produkte???
 

 

Undecided

Den MD5 Hash musst du generieren lassen. Bspw. per PHP, Javascript oder was auch immer.

Wo verarbeitest du denn die Daten? Also du holst sie ja irgendwo aus der DB.

Korrekt, ich hole mir den path per php aus der Datenbank.

Wie ich da jetzt den passenden MD5 erstellen soll erschließt sich mir überhaupt nicht.

In php gibt es eine Funktion md5, mit der du dir für jedes Bild den md5-Wert errechnen lassen kannst.

https://www.php.net/manual/de/function.md5.php

md5(media/image/brot.jpg)

–> e943a3 99b17579a7cc8ab810383ebce1   --> Dann kannst du aus den ersten sechs Zeichen einen Pfad derart zusammenbauen “media/image/ e9/43/a3 /brot.jpg”

Hinweis: Wenn “ad/” in deinem Ergebnispfad vorkommt, musst du “ad/” durch “g0/” ersetzen. Warum das so ist, weiss ich nicht.

1 „Gefällt mir“

Ggf wird das vom ein oder andern noch gebraucht, hier ist die SQL dazu für 600x600 px gerenderte Bilder, also nicht das Original.

CONCAT('https://beispiel.de/media/image/',
           SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),1,2),
           '/',
           SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),3,2),
           '/',
           SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),5,2),
           '/',
           sai.img,'_600x600.jpg') AS Bilderlink

sai.img kommt aus

INNER JOIN s_articles_img AS sai ON sai.articleID = sa.id AND sai.main = 1

600x600 wenn es so in der Medienverwaltung hinterlegt ist. Andernfall anderen Wert nehmen.

So kann man es direkt in SQL machen und braucht kein PHP. Vorteil ist, dass es 100x schneller als die PHP-Lösung ist.

 

1 „Gefällt mir“

If this is related to the article images, you can get the article by it’s id

article = Shopware () -> Modules () -> Articles () -> sGetArticleById ( articleID);



then you can take the image sources by

 

foreach($article[“images”] as $image){

       $url = $image[“source”];

}

Grossartig! Vielen Dank.

Das habe ich direkt in mein DHL Barcode Scanner Skript eingebaut, um mir auf dem Handy die Bestellungen nach dem Barcode Scannen über die Kamera anzeigen zu lassen.

@brettvormkopp schrieb:

Ggf wird das vom ein oder andern noch gebraucht, hier ist die SQL dazu für 600x600 px gerenderte Bilder, also nicht das Original.

CONCAT(‚https://beispiel.de/media/image/‘,
SUBSTRING(MD5(CONCAT(‚media/image/thumbnail/‘,sai.img,‚_600x600.jpg‘)),1,2),
‚/‘,
SUBSTRING(MD5(CONCAT(‚media/image/thumbnail/‘,sai.img,‚_600x600.jpg‘)),3,2),
‚/‘,
SUBSTRING(MD5(CONCAT(‚media/image/thumbnail/‘,sai.img,‚_600x600.jpg‘)),5,2),
‚/‘,
sai.img,‚_600x600.jpg‘) AS Bilderlink

sai.img kommt aus

INNER JOIN s_articles_img AS sai ON sai.articleID = sa.id AND sai.main = 1

600x600 wenn es so in der Medienverwaltung hinterlegt ist. Andernfall anderen Wert nehmen.

So kann man es direkt in SQL machen und braucht kein PHP. Vorteil ist, dass es 100x schneller als die PHP-Lösung ist.

 

Hi,
das hat mir schon enorm geholfen, vielen Dank!

Wie kann ich jetzt noch die Verbindung zu Varianten also articles_detail_id herstellen?
Ich habs schon mit

left join s_articles_img sai on sai.article_detail_id = sap.articledetailsID

versucht, jedoch ohne Erfolg. Ich verstehe nicht ganz wie das in Shopware gelöst wird.

@FragenAnsForum @Klimax
Bei meiner SQL ist noch ein „Fehler“. Wenn in der MD5 String die URL „/ad/“ wird, dann schreibt die Shopware um in „/g0/“, hier muss also noch ein Zusatz eingefügt werden.

CONCAT('https://example.com/media/image/',
            IF(SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),1,2) = 'ad','g0',SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),1,2)),
            '/',
            IF(SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),3,2) = 'ad','g0',SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),3,2)),
            '/',
            IF(SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),5,2) = 'ad','g0',SUBSTRING(MD5(CONCAT('media/image/thumbnail/',sai.img,'_600x600.jpg')),5,2)),
            '/',
            sai.img,'_600x600.jpg') AS Bilderlink
1 „Gefällt mir“