Gegeben: Artikel- und Benutzer-OXIDs. Aufgabe: Warenkorb befüllen

Hallo liebe Community,

so langsam verzweifle ich das eigentlich einfachen Aufgabe:

vorhanden sind die Benutzer-OXIDs sowie die von ihnen jeweils gewünschten Artikel-OXIDs (jeweils die Variante wenn zutreffend). Die Zuordnungen sind in eigenen Datenbanktabellen gespeichert.
Zu einem bestimmten Zeitpunkt sollen die Artikel in die Warenkörbe der Benutzer wandern, damit die Letzteren den gewohnten Checkout-Prozess durchlaufen können. Dies muss für die bereits eingeloggten und ausgeloggten Benutzer geschehen, sowie für den Benutzer, der die letzte benötigte Aktion ausgelöst hat (ein Sonderfall, der nicht unbedingt berücksichtigt werden soll).
Das momentane Problem besteht darin, dass die Benutzer sich zunächst aus- und sich erneut einloggen müssen, um die Artikel in ihren Warenkörben vorfinden zu können.

Hier die betroffene Stelle im Quellcode. Die Daten aus der DB sind in dem assoziativen Array $row gespeichert.


                       $oUser = oxNew( 'oxuser');
                       $oUser->load( $row['uid'] );

                       $oBasket = $oUser->getBasket('savedbasket');
                       $oBasket->addItemToBasket( $row['variante'], $row['amount'] );

                       // den Warenkorb des aktiven Benutzers laden
                       try {
                           if ( $oBasket = oxSession::getInstance()->getSession()->getBasket() ) {
                               $oBasket->load();
                               echo 'basket loaded';
                           }
                       } catch ( Exception $oE ) {
                           echo 'excception caught';
                       }

Hat jemand zufällig Ideen, wo das Problem entsteht und wie man es lösen könnte?

Alle von mir kontaktierten OXID-Agenturen haben erst nächste Woche Zeit, es wäre aber recht zeitkritisch. Daher könnte ich mir vorstellen, dass man mir gerne für die Lösung eine Rechnung ausstellen darf :slight_smile:

Vielen Dank im Voraus!

Hi,
warum holst du denn an einer Stelle den savedBasket und weiter unten dann den basket aus der Session?
Das getSession ist hier auch zu viel. Es reicht wenn du oxSession::getInstance()->getBasket() machst.

Ich würde an beiden Stellen den basket aus der Session holen. Probier das mal.

Grüße
Fabian

Das Hantieren mit der Session ist nur die Behandlung des aktuell eingeloggten Benutzers. Eigentlich nur weil er gerade da ist. Damit wird nur ein einziger Warenkorb auf den aktuellen Stand gebracht soweit ich das überblicken kann.

Es geht aber auch um alle anderen Benutzer, die an der Aktion teilnehmen, die Sessions dieser sind nicht bekannt bzw. teilweise auch nicht vorhanden.