Magento-Importer, Mehrsprachigkeit, Bestellnummern, Primary ID

Hallo!

Ich bin hier der Neue. Ich komme aber vielleicht jetzt öfters. Der ein oder andere kennt mich aus dem xt:Commerce-Umfeld und ein paar bekannte Namen hab ich hier auch schon gesichtet.

Warum ich hier bin:
Für unser neuestes Projekt sind wir auf Magento gewechselt, primär weil die Variantenverwaltung von xt:C eine Katastrophe ist. Wir werden dort aber mit unglaublich vielen Problemen konfrontiert, die teilweise auf Magento, teilweise aber auch auf die Anpassungen für den deutschen Markt zurückzuführen sind (ein paar Rants hier, aber das ist eher die Spitze des Eisbergs). Die so viel gepriesene Community ist faktisch nicht vorhanden, Dokumenation ebenso wenig und die Komplexität von Magento dürfte hinreichend bekannt sein.
Und ja, ich habe die berechtigte Kritik hier gelesen, was vor allem die Dokumentation angeht und ob OXID eine Zukunft hat. Trotzdem bin ich hier :slight_smile:

Zu meinen konkreten Problemen:

[B]Magento-Importer:[/B]
In Google findet man noch die Links auf die Doku, die aber alle nicht sauber umgeleitet sind und daher immer auf die Startseite der FAQ führen :frowning: Konkret geht es mir über den Magento-Importer. Vielleicht kann mir den jemand zur Verfügung stellen, wenn ich unserem Einkauf sage, ich bräuchte die 100.000 Excel-Zeilen grad nochmal, nur in einem anderen Format, springt mir jemand an den Hals.

[B]Mehrsprachigkeit:[/B]
Ich habe mit Freuden festgestellt, dass man direkt verschiedene Domains pro Sprache angeben kann und das man keinerlei Core-Files verbiegen muss, damit es so funktioniert wie gedacht. Zwei Sachen sind mir aber aufgefallen:
Die englischen URLs haben dann ein /en/ im URL, kann man das bedenkenlos entfernen? Gibt’s da schon was fertiges? Ansonsten würde ich mich über einen Hinweis freuen, in welcher Klasse der URL zusammengebaut wird.
Die Startseite ist unter / erreichbar mit canonical auf /en/home/ respektive /startseite/. / wird also nie im Index sein. Kann man dieses Verhalten irgendwo umdrehen?

[B]Bestellnummern:[/B]
Unsere Bestellnummern haben ein festes Format, das neben der eigentlichen Bestellnummer auch ein Shopkürzel und eine Prüfziffer enthält. Auch hier würde ich mich über einen Hinweis freuen, wo man ansetzen muss, um die OXID-Bestellnummer zu modifizieren. Die Primary ID ist es ja eher nicht.

Primary ID:
Hat da jemand einen Link für mich, wo ich mich einlesen kann, wie das System seine IDs errechnet? Ich hab was gefunden mit md5(), kann dem aber nicht so recht Vertrauen schenken, da md5() alles macht, nur eben nicht dafür garantiert, dass ein Hash eindeutig ist.

Das ist eine grössere Baustellle und ich gebe Dir nur ein paar kurze Hinweise.

Magento-Importer:

100.000 Excel-Zeilen grad nochmal, nur in einem anderen Format, springt mir jemand an den Hals.

Migration: Aus einer Excel-Masterfile können die Daten soweit es in OXID eine passende Zuordnung gibt mit entsprechenden Tools (Scripts, ETL) und know-how aufbereitet und dann direkt in die OXID-DB importiert werden. Das ginge auch aus der Magento Datenbank heraus.

Welche OXID Version kommt zur Anwendung?
Wie hast Du bisher neue Artikel angelegt?

Mehrsprachigkeit:

Die englischen URLs haben dann ein /en/ im URL, kann man das bedenkenlos entfernen?

Nein, da OXID die Pfade in der DB-Tabelle oxseo ablegt und und diese dann verwendet werden - u.a. zur Erstellung einer sitemap.xml nützlich uvm.

Bestellnummern:

Unsere Bestellnummern haben ein festes Format, das neben der eigentlichen Bestellnummer auch ein Shopkürzel und eine Prüfziffer enthält.

Als Bestellnummer ist oxartnum vorgesehen und Dein Format sollte kein Problem sein - aber nicht die Primary ID dadurch ersetzen! Das ist eine GUID (Globally Unique Identifier).

Einen Link zum Handbuch als PDF findest Du z.B. direkt hier drunter.

[QUOTE=msslovi0;90172]
[B]Mehrsprachigkeit:[/B]
Ich habe mit Freuden festgestellt, dass man direkt verschiedene Domains pro Sprache angeben kann und das man keinerlei Core-Files verbiegen muss, damit es so funktioniert wie gedacht. Zwei Sachen sind mir aber aufgefallen:
Die englischen URLs haben dann ein /en/ im URL, kann man das bedenkenlos entfernen? Gibt’s da schon was fertiges? Ansonsten würde ich mich über einen Hinweis freuen, in welcher Klasse der URL zusammengebaut wird.
Die Startseite ist unter / erreichbar mit canonical auf /en/home/ respektive /startseite/. / wird also nie im Index sein. Kann man dieses Verhalten irgendwo umdrehen?
[/QUOTE]
Das geht mit Sicherheit. Schau dir hier die oxseo*-Klassen an. Was fertiges gibt es da noch, nicht meines Wissen nach.

[QUOTE=msslovi0;90172]
[B]Bestellnummern:[/B]
Unsere Bestellnummern haben ein festes Format, das neben der eigentlichen Bestellnummer auch ein Shopkürzel und eine Prüfziffer enthält. Auch hier würde ich mich über einen Hinweis freuen, wo man ansetzen muss, um die OXID-Bestellnummer zu modifizieren. Die Primary ID ist es ja eher nicht.
[/QUOTE]
Die oxorder-Klasse ist dein Freund :wink:

[QUOTE=msslovi0;90172]
Primary ID:
Hat da jemand einen Link für mich, wo ich mich einlesen kann, wie das System seine IDs errechnet? Ich hab was gefunden mit md5(), kann dem aber nicht so recht Vertrauen schenken, da md5() alles macht, nur eben nicht dafür garantiert, dass ein Hash eindeutig ist.[/QUOTE]
oxUtilsObject::generateUId() erstellt die neuen Werte. Da kommt ein MD5 mit drin vor, das wird ja aber noch ganz gut angereichert. Unter anderem mit der microtime und Teilen der SessionId.

Die ganze Doku findest du hier:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/

Gruß Joscha

Da hast Du uns ja grade genau richtig zwischen Tür und Angel, mitten im Umzug erwischt…
Frag doch mal direkt an, oder vielleicht kann ja Marco die Datei nochmal auftreiben?

Das Script war aber für eine ältere OXID Version. Das ist aber grundsätzlich kein Problem, einfach die alte Version aufsetzen, Import durchführen und dann die DB mithilfe der Cumulative Patches hochziehen auf die aktuelle Version. Diese DB dann mit der eigentlichen Installation verbinden - et voilá!

Das hier war der Link (geht aktuell nicht mehr):
http://support.oxid-esales.com/versions/magentoimport_for_oxid_eshop_v4.zip

Im Google Cache ist auch noch der Text zu finden:

Von Magento importieren

OXID eSales stellt ein Modul zur Verfügung, mit dem Sie einfach Daten von Magento in den OXID eShop importieren können. Hier können Sie das Modul herunterladen.
Welche Daten werden importiert?

Das Modul importiert:
 Kategorien
 Artikel
 Die Zuordnungen von Artikeln zu Kategorien
 Artikelbilder (werden verkleinert, falls nötig)
 Crossselling-Artikel
 Zubehör-Artikel

Besonderheiten
Alle Artikel werden als aktiv importiert.
Varianten werden als separate Artikel importiert.
HTML Tags in Kurzbeschreibungen werden als Text importiert und in den Kurzbeschreibungen angezeigt.
Alle Hauptkategorien werden als aktiv importiert. Für Unterkategorien wird die Aktiv-Einstellung korrekt importiert.
In der Enterprise Edition werden alle Artikel in den Hauptshop importiert.
Bei manchen Artikeln mit speziellen Attributen wird der Preis als 0,00 importiert. Bitte überprüfen Sie die Preise nach dem Import.

Daten importieren
1) Einstellungen in der _config.inc.php bearbeiten
Im Magento Import ist die Datei _config.inc.php. In dieser Datei müssen mehrere Einstellungen vorgenommen werden:
$sOxidConfigDir
 Hier muss der Pfad zu ihrem OXID eShop auf dem Server angegeben werden (nicht die URL des eShops!). Sie finden den Pfad im eShop Admin:

Loggen Sie sich in den eShop Admin ein.
Gehen Sie zu Service -> Systeminfo.
Suchen Sie die Einstelung _SERVER["DOCUMENT_ROOT"]. Der Wert auf der rechten Seite ist der Pfad zu Ihrem eShop auf dem Server.

$sMagentoUrl
 Die URL Ihres Magento eShops, z. B. http://www.meinmagentoshop.de.
$sMagentoApiUsername and $sMagentoApiPassword
 Der Magento API Benutzername und das Passwort. Wie Sie einen Magento API Benutzer einrichten, erfahren Sie im Magento Forums.
$blImportImages
 Hier stellen Sie ein, ob die Artikelbilder importiert werden sollen oder nicht:
Wenn Sie true eingeben, werden die Artikelbilder importiert.
Wenn Sie false eingeben, werden keine Artikelbilder importiert.

2) Die Dateien auf den eShop Server kopieren

Kopieren Sie alle Dateien auf den Server, auf dem Ihr OXID eShop läuft.
3) magento2oxid.php ausführen

Als nächstes muss das Import-Script gestartet werden. Da der Import sehr lange dauern kann (bis zu mehreren Stunden), sollte das Script von der Kommandozeile aus gestartet werden:

php magento2oxid.php

Falls Sie nicht wissen, wie Sie Kommandozeile Ihres Servers aufrufen können, dann wenden Sie sich an Ihren Webhoster.

Abhängig von der Artikelanzahl kann der Import mehrere Stunden dauern. In der Kommandozeile werden die einzelnen Schritte des Imports angezeigt. Nachdem der Import beendet ist, wird die Dauer angezeigt, die der Import benötigt hat.

Ja, das ist mir schon klar, dass man sich das selber schreiben kann. Wollte ich aber vermeiden, da es ja was fertiges gibt, das derzeit aber nicht heruntergeladen werden kann.

[QUOTE=Earlybird;90182]Welche OXID Version kommt zur Anwendung?
Wie hast Du bisher neue Artikel angelegt?[/quote]

Zum Einsatz soll 4.6 CE kommen. Bislang wurde noch kein Artikel angelegt, die OXID-Installation ist noch komplett leer.

[QUOTE=Earlybird;90182]
Nein, da OXID die Pfade in der DB-Tabelle oxseo ablegt und und diese dann verwendet werden - u.a. zur Erstellung einer sitemap.xml nützlich uvm.[/quote]

Aber man könnte doch schon dafür sorgen, dass das ohne /en/ in oxseo abgelegt wird…

Die Primary ID ist ja von daher schon uninteressant, da sie kein Integer ist. Aber oxartnum als Bestellnummer? Ich hätte ja jetzt eher zu oxordernr in der Tabelle oxorder tendiert.

[QUOTE=msslovi0;90380] Aber oxartnum als Bestellnummer? Ich hätte ja jetzt eher zu oxordernr in der Tabelle oxorder tendiert.[/QUOTE]

oxordernr ist die Nummer der Bestellung selbst, nicht die Bestellnummer der einzelnen Artikel.

Hier gibts eine (ältere) Übersicht der Datenbankfelder:
http://wiki.oxidforge.org/File:Oxid_ce43x_mysql_admin_nomenklatur.xls

Gut, dann ist oxordernr doch eher das, was ich will :slight_smile:

[B]Bestellnr.[/B]
Sorry für meine Verwechslung, bin zu schnell drübergeflogen - habe bei mir die Bestellnr. in Bestellung Nr. xxxx umbenannt, weil der Begriff Bestellnr. im Versandgeschäft oft mit der Artkelnr. gleichgesetzt wird.

Die oxordernr findest Du in core/oxorder.php mehrmals - z.B. oxid 460, Zeile 1196:

            // setting order number
            if ( !$this->oxorder__oxordernr->value ) {
               $blInsert = $this->_setNumber();
            } else {
                oxNew( 'oxCounter' )->update( $this->_getCounterIdent(), $this->oxorder__oxordernr->value );}

Ich habe diese fortlaufende oxordernr unverändert gelassen und verwende zusätzlich eine eigene Nummerierung (etwa so wie Du es möchstest) und dafür eine neue Datenbank-Column eingefügt. Damit war mein Gesamtaufwand geringer - z.B. Tests im Zusammenhang mit einem Zahlungsmodul und anderen möglichen Konflikten. Du solltest aber wie schon gesagt nicht die OXID (ID) Column dazu verwenden.

[B]oxseo[/B]
Zu Einträge ohne “/en” liegt der erste Ansatz in /core/oxseoencoder.php und /core/oxseoencoder.php. Wie gross der Aufwand incl. Tests ist weiss ich nicht.

[B]DB-Nomenklatur[/B]
Die habe ich für CE 4.3.x geschrieben und sie ist zwar auch heute noch weitgehend gültig, birgt aber auch ein paar Fehler in sich.

Hoi,

ich hab das Script mal hier hin geschoben:
https://github.com/kermie/mage2oxid

Feel free :wink:

Danke! :):slight_smile:

@ msslovi0,

hast du den wechsel sauber hin kriegen können?
Wie sieht es mit den Magento Bestellungen und Kunden?
Kann man diese vielleicht ebenfals in Oxid übernehmen?

Ich hab mir das jetzt andersrum zurechtgedengelt, einen Magento-Exporter geschrieben, der das Format exportiert, dass ich in OXID wieder importieren kann.
Bestellungen und Kunden hatten wir noch keine im Magento-System, deshalb kann ich dazu nichts dagen.

hm,

schade…tja, dann wird er wohl bei Magento bleiben.

Lieben Dank für deine Rückmeldung.

[QUOTE=msslovi0;93421]Ich hab mir das jetzt andersrum zurechtgedengelt, einen Magento-Exporter geschrieben, der das Format exportiert, dass ich in OXID wieder importieren kann.
Bestellungen und Kunden hatten wir noch keine im Magento-System, deshalb kann ich dazu nichts dagen.[/QUOTE]

Magst du denn vielleicht deinen script teilen?

@ Jeannie,

Ich glaube nicht, dass mit einem Standard-Script die Migration von Magento oder anderen Shops zu Oxid im gewünschten Umfang (möglichst komplett und fehlerfrei) läuft. Nach meiner Erfahrung gibt es dabei immer wieder Wünsche und Besonderheiten wo Hand angelegt werden muss. Deshalb schlage ich einen individuellen Migrations-Service vor.

… oder einfach einen Pull-Request mit der nötigen Erweiterung hierauf:

Gruß

Ich hab meines ebenfalls mal auf Github gestellt, es wird aber niemandem wirklich was bringen ohne Erklärungen:

[QUOTE=msslovi0;95304]Ich hab meines ebenfalls mal auf Github gestellt, es wird aber niemandem wirklich was bringen ohne Erklärungen:
https://github.com/msslovi0/Magento2Oxid[/QUOTE]

hm, magst du denn nicht etwas dazu erklären?

Das Script holt derzeit alle Produkte aus einer bestimmten Kategorie (was bei uns auch gleichzeitig genau ein Hersteller ist). In Zeile 8 ist ccp.category_id entsprechend anzupassen.
Zu jedem Artikel werden anschließend die Informationen zu Preis, Hersteller, Bezeichnung und Kewywords geholt. Die entsprechenden attribute_id und store_id sind den eigenen Gegebenheiten anzupassen.
Das gleiche wird dann nocheinmal für alle Kindprodukte durchlaufen wegen der Varianten. Bei uns sind das jeweils zwei. Die Klartextbezeichnungen stehen in Zeile 92 (deutsch) bzw. Zeile 96 (englisch).
Das Endprodukt ist ein CSV, das so in OXID importiert werden kann.