bevor ich tiefer in die Materie einsteige stellt sich die Frage ob das, was ich vorhabe überhaupt realisierbar ist.
Im Shop integriert wird ein selbstgeschriebener Konfigurator, der am Ende einen absolut individuellen Artikel liefert. Mit Text, Bild und Preis.
Dieser Artikel basiert nicht auf, im Shop, vorhandenen Artikeln und ist nur speziell für diesen einen Kunden sichtbar und kann von diesem Kunden in den Warenkorb gelegt und wie jeder andere Artikel vom Shop weiterverarbeitet werden.
Der Artikel aus dem Konfigurator wird nur dann gespeichert, wenn er in den Warenkorb gelegt wird.
Der Konfigurator hat eine eigene Datenbank und greift nicht auf den Artikelstamm des Shops zu.
Dazu wären folgende Vorgehensweisen denkbar:
Ohne bisherige Prüfung, ob das mit Oxid überhaupt geht.
der Artikel wird komplett im Warenkorb gespeichert und taucht nicht im Artikelstamm auf.
wenn der Kunde den Artikel in den Warenkorb legt wird er, vom Konfigurator, zuerst in den Artikelstamm geschoben der Warenkorb verweist auf den Artikel im Artikelstamm.
Der Artikel ist sonst nirgends sichtbar, ausser im Warenkorb.
Bevor ich nun viel Zeit investiere um mich in die Struktur und Funktion des Warenkorbes einzuarbeiten würde mich interessiern ob sowas überhaupt machbar wäre.
ich denke du solltest eventuell umdenken. Wenn es eh nur einen Kunden gibt der das individuell sehen kann dann lege doch eine Kundengruppe an wo nur er drin steht und schreibe das ganze so das dann nur der Kunde den Artikel und den Konfigurator sehen kann. So kannst, wie es auch richtiger wäre den Artikel schon bei Module Installation in den Artikelstamm einpflegen und dann entspannt damit weiter arbeiten.
So wie du das vorhast ist das zu vergleichen mit der Lanze von hinten durch die Brust ins Auge. Einen Artikel erst in den Artikelstamm aufzunehmen wenn er in den Warenkorb gelegt wird ist meines Erachtens nach Quatsch.
Aber um deine Frage zu beantworten, ich denke schon das es möglich ist, aber nur mit erheblichen Arbeitsaufwand.
Die Variante mit der Kundengruppe finde ich sinnvoller - und auch leichter umzusetzen. So musst Du nur an der Sichtbarkeit schrauben, kannst aber ansonsten ganz normal auf die Standardfunktionen des Shops zurückgreifen.
Je nach dem was genau zu konfigurieren ist, gibt es mehrere in Frage kommende Module, angefangen vom Shirtnetwork zur individuellen (grafischen) Ausgestaltung von Artikeln. Einfachere (Options-)Auswahlen kann man bereits im Standard umsetzen, auch mit individuellen Freitextfeldern.
Nochmal zum Verständniss:
Jeder Kunde kann ganz individuell seinen Artikel konfigurieren und in den Warenkorb legen.
Es ist eben nur sein Artikel, der für andere gesperrt ist.
Hinter dem Konfigurator hängt eine umfangreiche Datenbank die von uns aufwändig gepflegt wird, da viele Parameter von regionalen Institutionen abhängt, die oft sehr unterschiedliche Vorstellungen haben.
Mit irgendwelchen Modulen kommen wir da nicht weiter.
Im Grunde hängt alles von der Art und Weise ab, wie der Shop seine Warenkörbe verwaltet.
Schreibt er alles notwendige, wie Text, Bild Preis etc. komplett in den Warenkorb weg oder refferenziert er auf den Artikelstamm.
Im ersten Fall könnte auch der Konfigurator in den Warenkorb schreiben,
Im zweiten Fall müsste der Konfigurator den Artikel anlegen , für andere Kunden sperren und die Refferenzen in den Korb schmeissen.
Wichtig zu wissen wäre noch, verwaltet der Shop den Warenkorb in einer sep. Datenbanktabelle oder in der Session?
Aber jeder Kunde startet auf der gleichen Basis? Es gibt also quasi einen Bestand an Basisartikel, die vom Kunde je nach Wunsch konfiguriert werden.
Ums mal plastisch zu machen, angenommen Ihr vertreibt PCs:
Kunde wählt aus 3 Grundmodellen Modell B
Kunde wählt einzelne Komponenten: Laufwerk Z, Festplatte E, Grafikkarte H
Kunde wählt Gehäusefarbe Rot
Kunde wählt Installationsservice Basic
-> Bestellung auslösen, Artikel wird in gewünschter Konfiguration in den Warenkorb gelegt
Das geht, denn die einzelnen Optionen werden aus der Session an den Warenkorb übergeben und in einer eigenen Tabelle in der Datenbank abgelegt. Das passiert im Standard bereits bei Auswahllisten und Parametern, die man am Artikel beim Bestellvorgang wählen / festlegen kann.
Nenn doch mal das von Euch vertriebene Sortiment - dann können wir nämlich eventuell eine bereits bestehende Lösung empfehlen.
Der Warenkorb ist das Basket Objekt. In dem wieder auf Article Objekte referenziert wird.
Am besten du installierst dir mal den Demo Shop mit den Demo Artikeln und debuggst das ganze. Ich arbeite erst seit Donnerstag letzter Woche mit oxid und wäre ohne Debugging nicht weit gekommen.
Am besten du nutzt dazu XDebug. Setze einfach an gegebene Stelle einen Breakpoint im order Controller in der Methode execute() nach dem Aufruf der
$oOrder->finalizeOrder( $oBasket, $oUser );
Methode. Dann siehst du alle Daten wenn du einen Sale Request machst.
Es geht natürlich auch schon eher im basket controller z.B. oder im order Controller an entsprechender Stelle wenn noch kein Sale raus geht.
Du siehst dann mittels XDebug ganz genau wo bei oxid welche Daten her genommen werden.
Prima, das ist doch mal ein Wort.
Demnach werden die Artikel im Warenkorb referenziert.
Man müsste, wenn man von aussen einen Artikel unterschieben will, einen Artikel anlegen, auf den der Korb referenzieren kann.
Da sammelt sich dann einiges an Müll im Artikelstamm
Hebsacker
Dein Beispiel basiert auf Stücklisten.
Im Grunde trägt ein PC Konfigurator nur Artikel zusammen und macht daraus einen neuen.
Da das in unserem Fall nicht klappt und der Konfigurator bereits existiert, gibts es nur die Möglichkeit dem Warenkorb irgendwie einen fertig konfigurierten Artikel unterzujubeln.
Das Ergebnis stundenlanger Diskusionen: es bleibt uns nur der genannte Weg.
Demnach werden die Artikel im Warenkorb referenziert.
Das stimmt so pauschal nicht. Im Warenkorb (Session) sind oxbasketitems, keine oxarticles. Es reicht ein Produkt anzulegen, dieses mit Persparam zu individualisieren und dann die Methoden in oxbasket und oxbasketitem zu überschreiben, so dass sie abhängig vom Wert des Persparams die Werte aus dem Konfigurator verwenden.