Anleitung Mehrfach zugewiesene Artikelbilder automatisch wiederherstellen

Thema wurde von pema, 21. September 2020 erstellt.

  1. pema

    pema Erfahrener Benutzer

    Registriert seit:
    17. Juni 2012
    Beiträge:
    440
    Danke erhalten:
    73
    Danke vergeben:
    121
    #1 pema, 21. September 2020
    Zuletzt bearbeitet: 22. September 2020
    Was?
    Bei vielen Artikeln haben wir identische und einmalig vorhandene Artikelbilder, die dann hunderten Artikeln zugewiesen sind (z.B. eine Uhrenschachtel/Geschenkverpackung zu allen Artikeln eines Herstellers). Diese lassen sich per CSV schnell und einheitlich hinzufügen und verwalten. Wenn man nun aber einen Artikel löscht, werden entsprechend auch alle zugewiesenen Bilder gelöscht. Ist ein Bild einem weiteren Artikeln zugeordnet, verschwindet es komplett.
    Das nachfolgende Script ist eine Art Absicherung, da es automatisch aus einem Pool die Bilder wiederherstellt, die man immer wieder braucht. Man braucht sich keine Gedanken mehr machen, falls ein Artikel mit Pool-Bild dann (versehentlich) gelöscht wird.

    Warum?
    Wir benutzen CSV und nicht den Responsive Filemanager, da wir tausende Bilder haben und damit alles sehr ruckelt. Immer wenn neue Artikel angelegt werden müssen, müsste man das identische zu verwendende Bild immer wieder neu auf den Webspace laden und/oder als Kopie ablegen. Dadurch wird alles unübersichtlich und der Speicherplatz wird unnötig verbraucht.

    Wie?
    Nachfolgend ist ein Perl Script, welches Ordner A (Zeile 7) und Ordner B (Zeile 8) abgleicht. In Ordner A kommen alle Bilder, die nie gelöscht bzw. immer wieder hergestellt werden sollen weil sie mehreren Artikeln zugeordnet sind. Ordner B ist original_images. Mit Hilfe eines Cronjobs gleicht das Script Ordner A und Ordner B ab, fehlt eine Datei in B die in A vorhanden ist, wird diese nach B kopiert.

    1. Erstellt auf eurem Webspace den Ordner /images/product_images/_cronjob_bilder

    2. Fügt folgenden Code über einen Texteditor (z.B. Notepad++) in eine neue Datei ein und speichert sie ab als copybilder.pl (unbedingt auf die Dateiendung .pl achten!)

    Code:
    #!/usr/bin/env perl
    
    use strict;
    use warnings;
    use File::Copy;
    
    my $source_dir = "/home/absoluter/pfad/shop-root/images/product_images/_cronjob_bilder"; #Pfad der gesicherten Bilder
    my $target_dir = "/home/absoluter/pfad/shop-root/images/product_images/original_images"; #Pfad der original_images von Gambio
    
    opendir(my $DIR, $source_dir) || die "can't opendir $source_dir: $!";
    my @files = readdir($DIR);
    
    foreach my $t (@files)
    {
    if(-f "$source_dir/$t" ) {
      
          unless(-e "$target_dir/$t") {
             copy "$source_dir/$t", "$target_dir/$t";
          }
       }
    }
    closedir($DIR);
    3. In copybilder.pl nun in Zeile 7 den absoluten Pfad zu /images/product_images/_cronjob_bilder eintragen. In Zeile 8 den absoluten Pfad zu /images/product_images/original_images eintragen.

    4. copybilder.pl speichern und nach /images/product_images/ hochladen.

    5. In den Ordner /images/product_images/_cronjob_bilder die Bilder einfügen, die immer nach original_images kopiert werden sollen, falls sie dort mal (versehentlich) gelöscht werden.

    6. Bei eurem Webspace/Server einen Cronjob erstellen, der den absoluten Pfad zu /images/product_images/copybilder.pl enthält.
    Wir haben die Ausführung auf alle 4h eingestellt, nach folgendem Muster:

    Code:
    0 */4 * * * /home/absoluter/pfad/shop-root/images/product_images/copybilder.pl
    Updatesicher, bestehenden Dateien müssen nicht verändert werden.