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:
„Gleiche Artikelbilder nicht erneut verwenden (Don’t re-use article images)“ und
„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.
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.
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.
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:
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.
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.
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.