addToBasket via AJAX

Hi,

ich muss den OXID Basket via AJAX mit mehreren Produkten befüllen. Ich wollte mir das Leben einfach machen und auch die volle OXID-Funktionalität nutzen, also versuche ich den Post zu OXID-Backend so zu machen wie das auch im Standard gemacht wird, bis auf den kleinen Unterschied, dass ich nicht das form poste sondern schicke mehrere AJAX Aufrufe hintereinander.

var strUrl = "/oxid_dev/index.php";

    $.post(strUrl, {
          aid: strMainArticle
        , anid: strMainArticle
        , am: 1
        , fnc: "tobasket"
    }) ;

bzw. Für Article mit Varianten:

$.post(strUrl, {
          aid: arrSelected[keyVariant]
        , anid: arrSelected[keyVariant]
        , parentid: keyVariant
        , am: 1
        , fnc: "tobasket"
    }) ;

leider klapt das nicht so ganz. Die Ergebnisse sind absolut nicht nachvollziehbar. Bei einigen Versuchen werden Basket Positionen für alle gesendeten Produkte angelegt, manchmal nur für einige, manchmal gar keine.
Ich habe schon zwischen die einzelnen AJAX Calls einen sleep (1 sec) eingebaut. Hilft auch NIX.

Irgendwelche idden, wie ich OXID überreden kann. Die OXID Standard-Oberfläche um Produkte in den Basket hinzuzufügen [U]kann ich definitiv nicht nutzen[/U].

Ich lege die Artikel auch nur via AJAX in den Warenkorb, in dem ich einfach die eigentliche Funktionalität im Hintergrund ablaufen und somit die Artikel in den Warenkorb lege. So oder so ähnlich könntest Du das ja auch tun.

das habe ich auch versucht, Nur offensichtlich ist das was / oder wie ich über AJAX an OXID schicke nicht das ist was OXID erwartet, um ein Produkt in Basket aufzunehmen.

tu dir selbst einen gefallen und schreib dir ein kleines Modul als Erweiterung für die details view das die Daten entgegen nimmt. Und pack dann alles über oxbasket in den Warenkorb - sonst wirst du dir so einige Haare ausreißen :smiley:

Ich bin jetzt schon soweit, mir die Haare auszureissen und zu verzweifeln.
Immer wenn ich meine es geschafft zu haben, passiert irgendwas neues.
Mein Problem ist, dass ich die Produktpräsentation ausserhalb vom OXID habe machen müssen.
Es muss doch möglich sein ein modul zu schreiben, welches “von aussen nach innen” den basket erzeugt. Der gesamte Bestellprozess soll dann in OXID erfolgen.
Hat jemand vielleicht ein template, wie eine OXID php Classe auszusehen hat, um den Basket bearbeiten zu können.
Da müsste die session aufgebaut werden, der Basket initialisiert, und …
Ich hoffe auf Hilfe und verspreche auch das Modull im Forum zu publizieren, falls jemand so was bräuchte.

danke im Vorraus

Session aufbauen und basket initialisieren macht Oxid ja selber sobald du eine Seite aufrufst. Dann musst du nur noch Produkte in den Warenkorb legen, das geht mit der function tobasket aus oxcmp_basket auch ohne Modul:
http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[f4f73033cf5045525644042325355732][am]=1&aproducts[f4f73033cf5045525644042325355732][persparam][details]=Books&aproducts[oiaa81b5e002fc2f73b9398c361c0b97][am]=2

Wir machen das so:

$sess = oxSession::getInstance();
$basket = $sess->getBasket();
$persParam = array(“bla”=>1);
$aid = ‘oxid vom artikel’;
$qty = 1;
$oBasketItem = $basket->addToBasket($aid,$qty,null,$persParam);

VIELEN DANK , speziel an leofonic
manche Sachen können so einfach sein, man muss nur wiessen wie :slight_smile:

@aggrosoft ebenso grossen Dank, das werde ich mit Sicherheit noch gut brauchen können.

[QUOTE=leofonic;107994]…mit der function tobasket aus oxcmp_basket auch ohne Modul:
http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[f4f73033cf5045525644042325355732][am]=1&aproducts[f4f73033cf5045525644042325355732][persparam][details]=Books&aproducts[oiaa81b5e002fc2f73b9398c361c0b97][am]=2[/QUOTE]

wenn ich mit z.b.
http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[f4f73033cf5045525644042325355732][am]=1&aproducts[f4f73033cf5045525644042325355732][persparam][details]=1HierKommenDiePersparamsRein1&aproducts[f4f73033cf5045525644042325355732][am]=2&aproducts[f4f73033cf5045525644042325355732][persparam][details]=2HierKommenDiePersparamsRein2
zweimal den gleichen aber verschieden individualisierten Artikel in den WK legen möchte, kann ich den Link so nicht verwenden. Der letzte Eintrag überschreibt dann die vorherigen. Also in diesem Fall werden 2x
Transportcontainer “2HierKommenDiePersparamsRein2” in den WK gelegt - und nicht zusätzlich auch 1x “1HierKommenDiePersparamsRein1”.

Auch wenn der thread jetzt schon älter ist: hat jmd eine Idee, wie der sonst sehr gut funktionierende Ansatz von leofonic hier überhaupt funktionieren kann?

ohne extra modul dann wohl nur mit mehreren requests:

http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[f4f73033cf5045525644042325355732][am]=1&aproducts[f4f73033cf5045525644042325355732][persparam][details]=1HierKommenDiePersparamsRein1
http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[f4f73033cf5045525644042325355732][am]=2&aproducts[f4f73033cf5045525644042325355732][persparam][details]=2HierKommenDiePersparamsRein2

oder?

Ja der Array ist ja auf der OXID aufgebaut also ist nur ein bestimmter Artikel pro OXID möglich, nur die Menge ist variabel.

ah, danke Frank!
müsste ich dann die (in der oxbasket.php “liegende”) addOrderArticleToBasket funktion per modul erweitern?
oder wo wäre ein guter ansatz, um mehrere gleiche artikel mit untersch. persparams “in einem rutsch” in den WK zu legen?

Hab’s mir nochmal angesehen, geht doch: Du kannst die OXID über den Parameter ‘aid’ übergeben, dann kannst du beliebige Werte für die Array-Indizes verwenden:
http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[0][aid]=f4f73033cf5045525644042325355732&aproducts[0][am]=1&aproducts[0][persparam][details]=1HierKommenDiePersparamsRein1&aproducts[1][aid]=f4f73033cf5045525644042325355732&aproducts[1][am]=2&aproducts[1][persparam][details]=2HierKommenDiePersparamsRein2

http://demoshop.oxid-esales.com/community-edition/?cl=basket&fnc=tobasket&aproducts[0][aid]=f4f73033cf5045525644042325355732&aproducts[0][am]=1&aproducts[0][persparam][details]=1HierKommenDiePersparamsRein1&aproducts[1][aid]=f4f73033cf5045525644042325355732&aproducts[1][am]=2&aproducts[1][persparam][details]=2HierKommenDiePersparamsRein2

wenn Ihr Code-Tags für die Beispiel-URLs nehmt, dann kann man die auch lesen :slight_smile:

[QUOTE=Hebsacker;130490]…wenn Ihr Code-Tags für die Beispiel-URLs nehmt, dann kann man die auch lesen :)[/QUOTE]

:wink:
lesen schon, aber nicht mehr klicken
:wink:

[QUOTE=leofonic;130432]Hab’s mir nochmal angesehen, geht doch…[/QUOTE]

Frank, Du bist ein HELD!
Danke!