Artikel Bilder Import: Vermeiden von doppelten Bildern bei erneutem Import

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.
 

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 "";
}

echo "=========================================";
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:

Vielleicht nützt es ja jemandem.

 

Gruss,

 

Jens

 

P.S.:

Es wird von folgender Spaltenreihenfolge in der CSV Datei ausgegangen:

ordernumber; image; main; position

2 „Gefällt mir“