Artikel Bilder Import: Vermeiden von doppelten Bildern bei erneutem Import

Hallo,

ich schon wieder :slight_smile:

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

Option 2 führt dich zum Glück :wink:

„Shopware, benutze bitte vorhandene Artikelbilder erneut, statt sie nochmal anzulegen“

Das geht definitiv.

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

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

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

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“

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.

Hallo,

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

Stehe gerade voll auf dem Schlauch… :frowning:

@schreibwaren-ihlee schrieb:

Hallo,

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

Stehe gerade voll auf dem Schlauch… :frowning:

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

1 „Gefällt mir“

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

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.

1 „Gefällt mir“

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

1 „Gefällt mir“

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!