Fehler bei CSV Import

HI Leute

Habe folgendes Problem.
OXID soweit installiert. Hatt alles geklappt.
Jetzt möchte ich eine CSV importieren und beim import kommt folgende Fehlermeldung:

Warning: Invalid argument supplied for foreach() in /var/www/vhosts/domain.de/httpdocs/admin/genimport_main.php on line 197

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/domain.de/httpdocs/admin/genimport_main.php:197) in /var/www/vhosts/domain.de/httpdocs/core/oxutils.php on line 966

Woran könnte das liegen?

Ich habe folegdnes System:

  • PHP Version 5.2.4-2ubuntu5.10

  • Apache/2.2.8 (Ubuntu) mod_python/3.3.1 Python/2.5.2 PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8

  • core mod_log_config mod_logio prefork http_core mod_so mod_actions mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_fcgid mod_include mod_mime mod_python mod_negotiation mod_perl mod_php5 mod_rewrite mod_setenvif mod_ssl mod_status mod_suexec mod_userdir

CSV ist nicht besonderes. 30.000 Einträge und 6 MB groß.

Hast du versucht die 30.000 Einträge in einem Durchgang zu importieren?
Das dürfte so kaum gehen, der Server dürfte an sein Memory-Limit kommen und Fehlermeldungen schmeissen.
Vielleicht erstmal mit 200 Stück versuchen um zu klären ob es überhaupt geht.

Feldnamen in der ersten Zeile in der CSV?

Hat soweit in der Form geklappt, dass ich mehrere Anläufe brauche um so eine große Anzahl von Daten zu importieren.
Aber es ist ein weiteres Problem aufgetreten.

Die Artikel die ich aus der CSV importiere, haben gleiche Artikelnummern, aber unterschiedliche Gößen.
Wenn ich aber diese jetzt in das Feld OXVARSELECT importiere, erscheint jeweils nur die letzte Größe. Der Rest wird schlichtweg nicht importiert.

Hier ein Beispiel so einer Zeile:

 

artnr	- brand - sizes - products_price - products_name - products_description - status - picture_url
8220/B	MARKE	6	147.700	EDUCE-V	8220 5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	7	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	8	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	9	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	10	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	11	147.700	EDUCE-V	8220 5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	12	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	5	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg
8220/B	MARKE	13	147.700	EDUCE-V	8220  5 Zoll Heel Pump	OK	xxxxx.jpg



Es hat alles geklappt, außer das OXID die Varianten “SIZE” nicht angelegt hat sondern lediglich die letzte größe in der Zeile.
Schafft das der import nicht oder habe ich was falsch gemacht?

Die Zuordnung nicht ich gemacht habe:

artnr = OXARTNUM
brand = OXSEARCHKEYS
size = OXVARSELECT
products_price = OXPRICE
products_name = OXTITLE
products_description = OXSHORTDESC
picture_url = OXPIC1

Hat jemand da ein Tipp für mich? :confused:

[QUOTE=topi009;29129]
Die Artikel die ich aus der CSV importiere, haben [B][U]gleiche Artikelnummern[/U][/B], aber unterschiedliche Gößen.
Wenn ich aber diese jetzt in das Feld OXVARSELECT importiere, erscheint jeweils nur die letzte Größe. Der Rest wird schlichtweg nicht importiert.

Hat jemand da ein Tipp für mich? :confused:[/QUOTE]

Da wird schon alles importiert, nur da du die gleichen Artikelnummern hast wird die Zeile mit der gleichen Artikelnummer beim Import immer wieder überschrieben. Du Updatest die Zeile 8220/B mit einem Import also 9 mal, und du siehst nur das Ergebniss der letzten Aktualisierung. Oxid generiert beim Import aus der Artikelnummer die OXID. Die Artikelnummern (bzw. die Oxid) müssen Unique sein, um einzeln zu erscheinen.

Du könntest probieren als erste Zeile die oxid hinzuzufügen, bestehend aus [Artikelnummer+Variante]. Somit erhälst du einmalige Artikel-Zeilen in deiner DB.

Der Rest passt.

Problem das ich die csv nicht ändern kann, da ich Sie so als export erhalte.

Heißt das dann, dass OXID eingentlich davon ausgeht, dass ein Produkte für jede größe auch eine eigene Artikelnummer hat?

Ich habe ja die Möglichkeit unter “VARIANTEN” eben die Größe anzulegen. Ich habe mal in die DBD geschaut und da ist es so, dass in OXPARENTID dies selber Artikelnummer drin steht.
Irgendwie muss das ja möglich sein, alles in einem Wisch zu importieren.

Vollkommen Richtig Firefax. Hatte auch das Problem dass ich in der OXID doppelte, wenn nicht sogar dreifache gleiche Texte/Nummern vergeben habe.

Aber OXID macht doch das selber. Sobald man einen Artikel anlegt und von diesem einige Varianten anlegt, sind in der Datenbank mehrrere Einträge mit der selben Artikelnummer.

[QUOTE=topi009;29146]Aber OXID macht doch das selber. Sobald man einen Artikel anlegt und von diesem einige Varianten anlegt, sind in der Datenbank mehrrere Einträge mit der selben Artikelnummer.[/QUOTE]

Der primärschlüssel der oxarticles ist aber die “OXID” und nicht die Artikelnummer. Wenn du die Artikel manuelle mit der gleichen Artikelnummer anlegst ist die OXID eine 23-Stellige? Zufallszahl.

Du benötigst auf jeden fall eine [B]EINMALIGE[/B] !!! “OXID” mit der du deine Artikel importierst.

Ich sehe 2 Lösungen für dein Problem.

  1. Du Importierst deine Artikel einmalig, dann kannst du acuh die CSV Datei anpassen und hochladen.
  2. Du willst du ständig importieren, dann müsstest du einen eigenen Importer schreiben. Bzw. zunächst kommt man eine neue CSV Datei generieren, die aus deinen Artikelnummer und Farbe eine OXID bastelt (manuell ist das ja kein Problem). Diese neue CSV im richtigen Format müsste man dann einlesen. Frag mich aber bitte nicht wie der Code aussehen würde. Das weiß ich auch nciht.

Du kannst ja beliebig viele Artikel einem Vater Artikel zuordnen. Das ist kein Problem. Jeder Artikel und varianten hat aber seine eigene “Oxid” in der oxarticles (ggf. auch eigene Artikelnummer).

Hallo zusammen,
weiß hier jemand wie oxid die OXID generiert (also den Wert in der Tabellenspalte OXID :slight_smile: )?
Vg,
Florian

habs doch noch gefunden in oxid/core/oxutilsobject.php:

public function generateUId()
{
    return substr( $this->getSession()->getId(), 0, 3 ) . substr( md5( uniqid( '', true ).'|'.microtime() ), 0, 29 );
}

automatisch mit der von Dir gefundenen Berechnungsmethode - es sei denn, Du gibst z.B. beim Import von Daten was eigenes vor

aber aufpassen, das MUSS shopweit einzigartig sein, sonst gibts Probleme