Fragwürdiger Ablauf des xtc-Attribut-Imports

Ich habe den Eindruck, dass bei dem xtc-Import der Varianten-Import total falsch läuft…

Da ich aber mit dem OXID-Varianten-System noch nicht so vertraut bin, möchte ich das aber erst noch mal verifizieren.

Variantenzuordnungen werden in xtc in einer Tabelle definiert, in der

die [B]product_id [/B]des Produktes zu dem ein Attribut gehört (z.B. “Rechner 12345”)

der [B]options_id[/B] der Optionsgruppe, zu der das Attribut gehört (z.B. “Arbeitsspeicher”)

und der [B]value_id[/B] des Attributes selbst (z.B. “4 GB OCX DIMM”).

Das Produkt zu dem ein Attribut gehört (z.B. “Rechner 12345”) wird während der Artikel-Importphase importiert.

Was mich nun sehr wundert, ist, dass während der[B] Attribut-Importphase[/B] in das Feld “[B]oxvarname[/B]” des Artikels “Rechner 12345” der Name der Optionsgruppe, zu der das Attribut gehört (z.B. “Arbeitsspeicher”) gespeichert wird…

Noch mehr verwundert mich, dass dieser Vorgang für [B]jedes [/B]in xtc gespeicherte Attribut wiederholt wird, so dass in das Feld “oxvarname” des Artikels “Rechner 12345” letztendlich immer wieder Name der Optionsgruppe, zu der das gerade bearbeitet Attribut gehört (z.B. “Arbeitsspeicher”) gespeichert wird.

Im konkreten Fall waren das 3.600 mal dieses fragwürdige Update in die Datenbank

m.E. absolut überflüssig und falsch, der Attribute-Import dauert auch elend lange…

Kann mir jemand evtl. kurz erläutern, wie der Mechanismus der Attribut-Zuordnung in OXID funktioniert, welche Tabellen wie daran beteiligt sind?

[QUOTE=avenger;13472]
Kann mir jemand evtl. kurz erläutern, wie der Mechanismus der Attribut-Zuordnung in OXID funktioniert, welche Tabellen wie daran beteiligt sind?[/QUOTE]

Meinst Du Attribute oder Selectlist? …Attribute sind das, was es bei XTC als TPT-Modul gibt.
… XTC Attribute sind bei Oxid Selectlists. Ich gehe mal von Selectlist aus. Kann mir nicht vorstellen, dass der Importer Modulspezifische Sachen behandelt.

SELECT * FROM oxarticles a
left join oxobject2selectlist o2s on a.oxid=o2s.OXOBJECTID
left join oxselectlist s on o2s.OXSELNID=s.oxid
where o2s.oxid is not null;

Das funktioniert bei mir, wird aber alles mit einen eigenen Importer gefüllt… kann sein, dass dieser etwas anders macht. Denke aber, dass das so passt.
Hoffe, dass das Modell nun ein wenig klarer ist. Ansonsten hier gibt es eine PDF.

Noch mehr verwundert mich, dass dieser Vorgang für [B]jedes [/B]in xtc gespeicherte Attribut wiederholt wird, so dass in das Feld “oxvarname” des Artikels “Rechner 12345” letztendlich immer wieder Name der Optionsgruppe, zu der das gerade bearbeitet Attribut gehört (z.B. “Arbeitsspeicher”) gespeichert wird.

Habe diesen Importer noch nie angeschaut.
Denke, da je Selectlist nur ein Eintrag vorhanden ist (für [B]alle[/B] xtc Attribute pro Option), das bei diesen Importer ein concat aus den alten Wert + den Neuen passiert.

GGf. kann man hier schöner ein group_concat machen.
Nicht vergessen ‘group_concat_max_len’ ein wenig anzupassen.

[QUOTE=MBa;13489]

SELECT * FROM oxarticles a
left join oxobject2selectlist o2s on a.oxid=o2s.OXOBJECTID
left join oxselectlist s on o2s.OXSELNID=s.oxid
where o2s.oxid is not null;

[/QUOTE]
Also:

Die Tabellen “[B]oxselectlist[/B]” und “[B]oxobject2selectlist[/B]” werden vom Attribute-Importer [B]nicht[/B] verwendet…

So wie ich den Code verstehe, wird so etwas importiert: http://www.oxid-esales.com/en/resources/help-faq/eshop-manual/example-variants-different-sizes

Also Produktvarianten mit nur [B]einem [/B]Variationsparameter!

Was aber nur ein sehr spezieller Fall der xtc-Attribute ist, weil es nach meinem Verständnis nur [B]eine [/B]Attributgruppe verwenden kann…

Insofern wird das von mir in meinem vorigen Post beschriebene Verhalten erklärlich…

Aber das hat so gut wie [B]wenig bis nichts [/B]mit den xtc-Attributen zu tun, bzw. ist ein sehr spezieller Spezialfall, wenn nur [B]eine [/B]Attributgruppe vorhanden ist!

Dann (aber auch [B]nur[/B] dann) könnte man das, wie es geschieht als Variante importieren…

Der Attribut-Importer [B]muss [/B]aber (auch) in der Lage sein, die z.B. hinter dieser Anwendung stehende Attributstruktur zu importieren:

http://www.powertemplate.de/kunden/beckpc_office/product_info.php/info/p828_Beck-PC-O-PRO1.html (Da gibt es so locker 28 Optionsgruppen, die zu einem Produkt gehören…)

Selbst z.B. nur 2 Attributgruppen (Größe, Farbe) lassen sich mit dem [B]gewählten Importverfahren nicht [/B]abbilden!

Das funktioniert bei mir, wird aber alles mit einen eigenen Importer gefüllt…
Erlauben diese Selektlisten Attribut-Strukturen wie hier: http://www.powertemplate.de/kunden/beckpc_office/product_info.php/info/p828_Beck-PC-O-PRO1.html ?

Könntest Du mir den Code für den Attribut-Import aus Deinem Importer zur Verfügung stellen? Dann werde ich mal versuchen, den Attribute-Import zu generalisieren.

Code-Spenden bitte an: [email protected] senden…

Währe was für den Bugtracker. Keine Ahnung wie wichtig der Oxid-Ag diese Migration ist.

GGf. wird hier immer die gleiche OX-ID benutzt und dementsprechend die alte überschrieben.


md5(concat(xtcproduct_id,xtcoptionsid,xtcattribute_id))

…oder so ähnlich könnte dann funktionieren.

Richtig währe es meiner Meinung, wenn sämtliche Artikelkombinationen abgebildet werden.
Aus T-Shirt (rot, schwarz und L, M=>2 Optionslisten) sollten dann folgende Varianten generiert werden:
[ul]
[li]* rot (M)
[/li][li]* schwarz (M)
[/li][li]* rot (L)
[/li][li]* schwarz (L)
[/li][li]* usw.
[/li][/ul]
Ist für den Kunden um einiges unübersichtlicher als XTC-Optionen, dafür funktioniert so die Lagerverwaltung.
Es gibt aber Module, die so etwas aufschlüsseln… Habe aber irgendwo hier im Forum gelesen, dass das ganze schnell (je komplexer…) ein Performancekiller wird.

Erlauben diese Selektlisten Attribut-Strukturen wie hier: http://www.powertemplate.de/kunden/beckpc_office/product_info.php/info/p828_Beck-PC-O-PRO1.html ?

Eigentich schon, aber…
Ich glaube mit Varianten wirst Du nicht wirklich glücklich. Varianten sind ganz primitive Dinger. Ohne Bild, ohne Modell-Nr. – Nur Preis und Text.
Ich bin ein Modul am schreiben, welches den Text auf JSON-Validät (ist den Kunden zumutbar, da WaWi) prüft und dementsprechend ein Objekt anstatt Text zur Verfügung stellt. Ist aber bisher nur in der Ansicht durchgetestet, der komplette Bestellprozess muss noch exerziert werden.
Für diesen Shop wird bei den Optionen aber halt keine Modell-Nr benötigt, von da her taste ich IMHO nichts kritisches an.

Könntest Du mir den Code für den Attribut-Import aus Deinem Importer zur Verfügung stellen? Dann werde ich mal versuchen, den Attribute-Import zu generalisieren.

Wenn Du das wieder der Community zur Verfügung stellst (ich weiß, Du hast da kein Problem mit):
[ul]
[li]* SQL mit group_concat: ja
[/li][li]* Framework, welches Timouts verhindert und eine Art Template-Sprache (Loops) für SQL ist: nein… genau in diesen Bereich greift das Framework. Also Du musst aus zwei SQLs eins machen. Dürfte dann ein wenig schneller sein, aber ist dann sehr Timeout gefährdet.
[/li][li]* Oben erwähntes JSON musst Du selber rausmachen :slight_smile: … das Komplexe ist aber halt der group_concat auf die Optionen.
[/li][/ul]
Mein Importer ist aber nicht für XTC oder OSC gedacht, sondern für eine sehr spezielle Warenwirtschaft… Die Wawi sieht aber hierfür nur eine Option vor (sind auch keine wirklichen Produkte aber nützlich im Webshop:cool:).

Nur ein Tipp:
Ich würde dies (Dein Link) mit einen eigenen Kategorietemplate lösen.
Und zwar eins, welches alle Produkte als Masterprodukte bzw. deren Varianten auflistet.
Diese MP sind in unsichtbaren Kategorien, welche Unterkategorien dieser Kategorie sind (Diese Unterkategorien bilden praktisch Optionsgruppen nach).

ZB:
\Cat Beck PC O-PRO1 (Sichtbare Kategorie)
.|- Cat Festplatten (diese und folgende K. sind unsichtbar)
…|- Art Festplatte 1
…|- Art Festplatte 2
…|- usw.
.|- Cat Arbeitsspeicher
…| hier die einzelnen Arbeitsspeicher Produkte
.|- Cat CPUs
.|- usw…

Die sichtbare Kategorie bildet zusätzlich die Unterkategorien ab, listet deren Produkte auf und bastelt ein Formular, welches mehrere Produkte in den Warenkorb legt(dies ggf. mit Modul).
Denke, dies ist die einzige Möglichkeit die Übersicht zu bekommen wie sie XTC hatte und die Lagerverwaltung wie sie Oxid kann… andersrum ist dies so dann auch mit XTC möglich.:cool:
Nachteil hier ist, wenn das Komplettsystem einen Rabatt bekommen soll, bzw keins dieser Artikel aus den Warenkorb entfernt werden darf.
Hierfür braucht es ein Bundlemodul… Damit lässt sich dann so etwas noch besser realisieren;)

Aber generell lassen sich so, wenn Du den Importer dementspechend erweiterst alles Mögliche darstellen. Es braucht dann halt ein zusätzliches Template.

Ach ja, zu den derzeitigen Import… Kann es sein, dass
oxarticles
.oxvarcount
.oxvarminprice
usw. mit den wiederholenden Abfragen errechnet wird?
Wenn dies so ist, dann kann man das auch mit einen group Statement lösen. So etwas (auch das mit den Varianten) ist leider immer sehr Timeout gefährdet.

[QUOTE=MBa;13538]ZB:
\Cat Beck PC O-PRO1 (Sichtbare Kategorie)
.|- Cat Festplatten (diese und folgende K. sind unsichtbar)
…|- Art Festplatte 1
…|- Art Festplatte 2
…|- usw.
.|- Cat Arbeitsspeicher
…| hier die einzelnen Arbeitsspeicher Produkte
.|- Cat CPUs
.|- usw… [/QUOTE]
In xtc habe ich das tatsächlich (fast) genau so realisiert…

Die Optionsgruppen sind als Kategorien, die Optionen als Produkte innerhalb der Kategorien definiert. (D.h., ich habe für xtc ein MASTER/SLAVE-Konzept für die Attribute implementiert.)

Die Zuordnung der Optionen zu dem Produkt (“Beck PC O-PRO1”) erfolgt (intern) über die xtc-Tabelle “products_attributes”.

Diese Kat-/Produkt-Struktur wird durch den Importer auch problemlos importiert.)

Die Frage ist nun:

Kann ich dem Master-Produkt “Beck PC O-PRO1” andere Produkte als Optionen zuordnen, deren Auswahl dann Zu-/Abschläge auf den Preis des Master-Produkts “Beck PC O-PRO1” bewirken? (Das ist die Funktionalität in xtc.)

Wo/Wie geschieht das?

[QUOTE=avenger;13547]In xtc habe ich das tatsächlich (fast) genau so realisiert…
[/quote]
Genau das meinte ich mit

[QUOTE]… andersrum ist dies so dann auch mit XTC möglich.:cool:

[/quote]

Kann ich dem Master-Produkt “Beck PC O-PRO1” andere Produkte als Optionen zuordnen, deren Auswahl dann Zu-/Abschläge auf den Preis des Master-Produkts “Beck PC O-PRO1” bewirken? (Das ist die Funktionalität in xtc.)

Ich mache mal Eigenwerbung:
http://www.oxid-esales.com/forum/showthread.php?t=1995

Die Zuordnung der Optionen zu dem Produkt (“Beck PC O-PRO1”) erfolgt (intern) über die xtc-Tabelle “products_attributes”.

Bei meinen Bundles wird ein Product mit (n) Selectlists verlinkt…(dies ist Oxid-Standard und währe (n) Optionsgruppen bei xtc )
…und diese Selectlists erkennen dann, dass es ein Bundle ist und verlinken dann anstatt zu normalen Selectlisteinträgen mit (n) anderen Produkten (xtc=Attribute).
Hier hat das Bundleprodukt einen Preis. Die Auf- und Abschläge sind die der Selectlist (Oxid-Standard). Die Selectlisteinträge werden dann per Modul in richtige Produkte umgewandelt.
Im Warenkorb werden die (Sub-)Artikel wie Rabattartikel gelistet… und jeder (Sub)Artikel ist ein richtiger Artikel mit Lager, Bilder usw.