Hallo an alle OXID-Kenner!
Ich würde gerne per Programm einen Artikel in den Warenkorb legen.
Ich habe schon alles durchsucht und auch schon einiges versucht. Mittels
oxSession::getInstance()->getBasket()
kann ich zwar auf den Basket zugreifen und gespeicherte Artikel abfragen aber keinen hineinlegen (z.B. mit addToBasket oder toBasket). Dann bekomme ich eine Fehlermeldung dass der Warenkorb offline wäre…
Kann hier jemand helfen??
Grüße Michael
Also wenn du dich in einer Oxid View oder einem Modul befindest dann so:
$oBasket = oxSession::getInstance()->getBasket();
$oBasket->addToBasket($sProductID, $dAmount); //Simpelster fall, keine Auswahllisten, keine persParams
Danke @aggrosoft für Deine Antwort!
Allerdings hatte ich ja schon geschrieben, dass ich dann die Fehlermeldung im Frontend bekomme, dass der Warenkorb offline wäre.
Gibt es noch eine andere Möglichkeit oder gibt es noch etwas zu beachten?
Wenn ich auf diese Weise auf den Warenkorb “lesend” zugreife (also Artikel die darin abgelegt sind auslese) geht es einwandfrei OHNE Fehlermeldung.
Grüße
Michael
Also sei mir nicht böse, aber eine Meldung “Warenkorb ist offline” habe ich noch nie gesehen. Schalt zuerst mal den debug modus an (config.inc.php), als einfachsten Test leg dir mal nen Testartikel an ohne Varianten etc. achte darauf dass er aktiviert ist und das die Lagermenge (wenn aktiviert im Shop) nicht null ist.
Und denk daran dass der $sProductID die OXID ist, nicht die Artikelnummer oder Ähnliches.
OK - die Meldung heist da:
“Die angeforderte Seite ‘warenkorb/offline.html’ konnte nicht gefunden werden.”
Aber vielen Dank für den Hinweis mit dem Debug-Flag - habe das Problem gefunden. Ich wollte einen Artikel in den Warenkorb legen, welcher nicht mehr am Lager war (OXSTOCK == 0)
Viele Grüße
Michael
Das war nicht “Warenkorb offline” sondern der Shop hat versucht die offline.html anzuzeigen (die unter dem Pfad aber nicht zur Verfügung steht).
Also die Seite, die der Shop zeigt, wenn man im Admin auf offline schaltet, oder wenn die Datenbank nicht erreichbar ist.
Oder wenn man einen ausverkauften Artikel kaufen will 
Hallo,
ich habe ein ähnliches Problem. Ich versuche, ein AJAX-AddToBasket zu bauen. Dazu verwende ich ein PHP-Script, das “neben” dem eigentlichen Shop läuft. Es ist also kein Modul und keine View, sondern inkludiert nur die nötigsten PHP-Dateien, um sich an den Shop “ranhängen” zu können.
Mit folgendem Code versuche ich, einen Artikel in den Warenkorb zu legen:
$oConfig = oxConfig::getInstance();
$oSession = $oConfig->getSession();
$oBasket = $oSession->getBasket();
$oBasket->addToBasket($sProductId, 1);
$oSession->getBasketReservations()->reserveBasket($oBasket);
Da von dem Produkt nur ein Exemplar vorhanden ist, ist es anschließend auch nicht mehr über die Produktseite kaufbar. Allerdings erscheint es nach dem Neuladen der Seite nicht im Warenkorb (index.php?cl=basket). Die SessionId von Script und Shop (force_sid) sind identisch.
Mit folgender Zeile wird der Artikel wieder freigegeben:
$oSession->getBasketReservations()->discardReservations();
Also meine Frage: Warum wirken sich die Änderungen nach einem Neuladen von “index.php?cl=basket” nicht auf diesen Warenkorb aus? Wie gesagt, es ist dieselbe SessionId und kein Benutzer ist eingeloggt.
Anders gefragt: Wie müsste ich es machen, damit es klappt? 
Noch eine Frage: Was bewirkt der Config-Parameter ‘blPsBasketReservationEnabled’?
Gruß
Stefan
Hi Stefan,
das über ein eigenes PHP Script zu machen, ist natürlich die schönere Lösung.
Ich habe das einfach über den bereits vorhandenen Request gelöst, also einfach den Button und die Formaction abgegriffen. Funktioniert genauso gut und auch schnell, als wenn Du das über ein eigenes PHP-Script lösen würdest…
Allerbeste Grüße vom Chris