frimipisofrimipiso MemberComments: 298 Received thanks: 47 Member since: November 2015

Hallo,

ich schon wieder :-)

Ich versuche gerade mittels "Import/Export Advanced" Artikelbilder per CSV zu importieren, wobei ich aus meiner 
CSV Datei bereits einige Bilder importiert habe und einige Artikelbilder neu dabei sind.

Ich habe das Problem, dass ich beim Import vorhandener Bilder IMMER doppelte Bilder erhalte, egal wie ich das Import/Export Tool
konfiguriere. Man kann für die Variable "Bildimport Modus" zwei Werte einstellen:

1. "Gleiche Artikelbilder nicht erneut verwenden (Don't re-use article images)" und
2. "Gleiche Artikelbilder erneut verwenden (Re-use same article images)"

Ich habe vermutet, dass Option 1 die doppelten Artikelbilder vermeidet, aber das funktioniert nicht. Auch Option 2 führt 
zu doppelten Artikelbildern.

Was kann ich tun? Ich vermute, dass ich wie oft zu dämlich bin die offensichtliche Lösung zu sehen.

Ich könnte natürlich ein php Skript schreiben, dass meine Zeilen im CSV parsed und nur die wieder ausgibt,
die noch nicht in der Shopware Datenbank sind. Aber wenn ich das vermeiden könnte, wäre das prima.

Vielen Dank und viele Grüsse,

Jens

Comments

  • derkostaderkosta MemberComments: 443 Received thanks: 67 edited February 2016 Member since: November 2013

    Option 2 führt dich zum Glück ;-)

    "Shopware, benutze bitte vorhandene Artikelbilder erneut, statt sie nochmal anzulegen"

    Das geht definitiv.

  • frimipisofrimipiso MemberComments: 298 Received thanks: 47 Member since: November 2015

    Hi derkosta,

    danke für den Tipp. Das spricht dafür dass ich mal wieder zu dämlich war.

    Ich lade jetzt über Nacht wieder das Backup des image Verzeichnis hoch und werde es morgen nochmal ausprobieren.

    Gruss und gute Nacht,

    Jen

  • Moritz NaczenskiMoritz Naczenski AdministratorsComments: 9292 Received thanks: 2781 Member since: September 2013

    Hallo,

    die Option bezieht sich auf den Inhalt der Datei. Wenn in der Datei ein Bild mehrfach vorkommt, dann wird es nur einmal importiert. Beim Import kennt der Importer die bereits importierten Bilder nicht. Somit kannst du nur Bilder hinzufügen.

    Moritz

  • frimipisofrimipiso MemberComments: 298 Received thanks: 47 Member since: November 2015

    Hi Moritz,

    danke für das Feedback. Dieser Tipp spart mir viel Zeit. Ich werde ein Filterskript für meine CSV Datei schreiben, die
    vorhandene Bilder herausfiltert.

    Ich schlage vor, dass man den "Bildimport Modus" etwas besser dokumentiert. Diese Einstellung scheinen mehrere Nutzer misszuverstehen.

     

    Gruss,

    Jens

  • frimipisofrimipiso MemberComments: 298 Received thanks: 47 edited February 2016 Member since: November 2015

    OK here we go. Hier ist ein Skript, das die bereits existierenden Bilder aus einer Bilder Import CSV Datei herausfiltert, um im Import/Export Advanced Modul doppelte Artikelbilder zu vermeiden. Über die Variablen "input_file" und "output_file" kann man die Namen der Input und Output CSV Dateien wählen. Es wird nur überprüft, ob ein Bild für einen Artikel in der Position bereits existiert. Falls ja wird er herausgefiltert. Man kann also 
    keine existierenden Bilder updaten.
     

    <?php
    //input image csv
    $input_file = "shopware_article_images_export.csv";
    $output_file = "images_filtered.csv";
    
    
    require('sw_db_config.php');
    
    $swdb = new mysqli($host,$username, $password,$dbname);
    if ($swdb->connect_errno) {
        echo "Failed to connect to MySQL: (" . $swdb->connect_errno . ") " . $swdb->connect_error;
    }
    
    //////////////////////////
    // read csv file
    //////////////////////////
    
    $fp = fopen($input_file,"r");
    $fp_out = fopen($output_file,"w");
    
    /////////////////////////////////
    //go over all lines of csv file
    /////////////////////////////////
    $firstline = true;
    $num_skipped = 0;
    $num_added = 0;
    
    while (($csv_line=fgetcsv($fp,0,";")) != FALSE) {
    
     //skip title line
     if ($firstline) {
      $firstline=false;
      fputcsv($fp_out,$csv_line,";");
      continue;
     }
    
     $ordernumber = $csv_line[0];
     $position = $csv_line[3];
     $image = $csv_line[1];
    
     //get corresponding shopware product id
     $sw_query=$swdb->query("SELECT articleID FROM s_articles_details WHERE ordernumber = " . $ordernumber . " ");
     $sw_row=$sw_query->fetch_assoc();
     $sw_pid=$sw_row['articleID'];
    
     //check for existing images for this article
     $tmp_query = "SELECT position FROM s_articles_img WHERE articleID = '". $sw_pid . "'  AND position = " . $position;
     $sw_query=$swdb->query($tmp_query);
    
     //no results => write line into output csv file
     if ($sw_query->num_rows == 0) {
        echo "==> output ordernumber:" . $ordernumber . ", position: " . $position . " -> " . $image;
        fputcsv($fp_out,$csv_line,";");
      $num_added++;
      }
     else {
      echo " Skipped: " . $ordernumber . ", " . $position;
      $num_skipped++;
     }
    
     echo "<br>";
    }
    
    echo "=========================================<br>";
    echo "DONE Skipped: " . $num_skipped . ", added: " . $num_added;
    
    fclose($fp);
    fclose($fp_out);
    ?>
    

    Ausserdem sollte man eine Datei "sw_db_config.php" im gleichen Verzeichnis anlegen mit den Datenbankdetails:

    <?php
    
    ////////////////////
    // database config
    ////////////////////
    $host =  'localhost';
    $port = '3306';
    $username = 'XXX';
    $password = 'XXX';
    $dbname = 'XXX';
    
    ?>

    Vielleicht nützt es ja jemandem.

     

    Gruss,

     

    Jens

     

    P.S.:

    Es wird von folgender Spaltenreihenfolge in der CSV Datei ausgegangen:

    ordernumber; image; main; position

    Thanked by 2derkosta NextMike
  • mobilizemobilize MemberComments: 21 Received thanks: 2 Member since: May 2016

    Wenn ich micht richtig erinnere, steht in der DB Tabelle auch die Bildgröße. Anhand derer könnte man nochmal gegenprüfen, ob das Bild sich nicht eventuell geändert hat, d.h. ob ein neues vorhanden ist.

  • schreibwaren-ihleeschreibwaren-ihlee MemberComments: 107 Received thanks: 3 Member since: May 2013

    Hallo,

    wo muss denn das script abgelegt werden oder der Code eingefügt?

    Stehe gerade voll auf dem Schlauch... :-(

  • frimipisofrimipiso MemberComments: 298 Received thanks: 47 Member since: November 2015

    Hallo,

    wo muss denn das script abgelegt werden oder der Code eingefügt?

    Stehe gerade voll auf dem Schlauch... :-(

    Am besten schreibt man das Skript in das Verzeichnis, in dem die Bild CSV Datei steht. Ich habe ein neues
    Skriptverzeichnis im Shopverzeichnis erstellt und das Skript, sowie die Bild CSV Datei hineingeschrieben.

    Gruss,

     

    Jens

    Thanked by 1schreibwaren-ihlee
  • schreibwaren-ihleeschreibwaren-ihlee MemberComments: 107 Received thanks: 3 Member since: May 2013

    Hallo noch mal,

    also ich blicke das nicht, bin da auch noch so ziemlich ein "Anfänger"....

    Haste ne Pfadangabe oder ähnliches wo mir da weiter hilft oder ne kleine Anleitung, denke bin nicht der einzige der da auf der Leitung steht...

    Wäre super nett, Danke im voraus...

    Gruß

    Tommy

  • NextMikeNextMike MemberComments: 2735 Received thanks: 429 edited June 2016 Member since: December 2014

    Ich kann das jetzt nicht überprüfen, aber glaube wenn man Artikel mit Bildern (keine Bilder alleine) importiert, prüft Shopware ob die das Bild schon in der Medienverwaltung vorhanden ist und nimmt dann dieses, statt es neu "reinzuziehen". Man müsste also beim Artikelanlegen alle BildURLs für diesen Artikel angeben.

    Vielleicht ist das ein Ansatz.

    Thanked by 1schreibwaren-ihlee
  • wolkenkraftwolkenkraft MemberComments: 40 Received thanks: 3 edited June 2016 Member since: May 2013

    Guten Morgen,

    Du könntest ein eigenes Import-Plugin schreiben, dass beim Anlegen der Bilder folgendes macht:

    1. Prüfen, ob es bereits eine Datei mit der exakt selben Größe gibt
    2. Wenn ja, dann die Datei am Server mit der neu zu importierenden vergleichen
    3. Wenn der Vergleich matched, dann nicht importieren, sonst schon

    So bist Du ganz auf der sicheren Seite und der Import sollte auch recht schnell laufen, da nicht alle Dateien verglichen werden.

    Am Elegantesten wäre es, wenn Du über das Plugin ein neues Command für das CLI Interface erstellst und den Import-Vorgang über das CLI ausführst.

    Liebe Grüße,
    Michael

    Thanked by 1schreibwaren-ihlee
  • AndyBAndyB MemberComments: 81 Received thanks: 6 Member since: March 2016

    Und was mache ich wenn ich alte Bilder ersetzen möchte. Also erst löschen und dann neue hochladen?

    Was ist die empfohlene Vorgehensweise? Über das Import/Export scheint das ja nicht zu funktionieren!

     

Sign In or Register to comment.