Artikel im Warenkorb dauerhaft speichern

Hier können Sie Fragen bezüglich des Shop Moduls stellen.
Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Do 19. Mai 2011, 15:37

Hallo,
ich möchte gerne die Artikel, die ein Kunde in den Warenkorb legt, speichern. Wenn der Kunde Artikel in den Warenkorb legt, sich dann ausloggt und meinetwegen am nächsten Tag wieder einloggt, dann soll er seine Artikel im Warenkorb wieder finden. Gibt es da eine einfache Möglichkeit in webEdition oder wie würde man das am besten angehen?
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

ThomasGoebe

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon ThomasGoebe » Do 19. Mai 2011, 23:25

Hallo Luigii,

das ganze könnte mit Objekten und ein wenig PHP funktionieren.

Vom Ablauf her musst Du immer, wenn ein Artikel in den Warenkorb gelegt oder geändert wird, den kompletten Warenkorb (also die Session Daten des Warenkorbs) in ein Objekt speichern, welches dem Kunden zugeordnet ist.

Nach einem Login musst Du dann entsprechend nachschauen, ob es so ein Objekt gibt und wenn ja, die Daten wiederherstellen.

Von Haus aus kann webEdition dies noch nicht. Allerdings ist das eine sinnvolle Funktion. Schreib doch dazu mal einen Feature-Request in unserer BugBase (http://qa.webedition.org).

Ich kann mir vorstellen, dass sich das durchaus mit den in der wE 6.2 eingeführten Persistent Logins kombinieren lassen könnte. Allerdings sicher nicht sofort. Es stehen da noch andere Dinge auf der Roadmap.

Gruß
Thomas

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Fr 5. Aug 2011, 13:20

SO, ich habe mir überlegt, dass es das beste ist, den Warenkorb direkt beim Kunden zu speichern, ohne den Umweg über die Objekte. Es gibt also jetz ein Feld "Warenkorb" in der Kundenverwaltung, welches Artikelanzahl und Artikelnummer enthält. Dieses Feld wiord erst gelöscht, wenn der Warenkorb im Shop abgeschickt wird, so bleiben die Infos über den das Sitzungsende hinaus erhalten.
Die Frage ist nun, wie bekomme ich genau diese Artiekl wieder in der Shop Warenkorb hinein, wenn der Nutzer sich das nächste mal anmeldet?
Nach der Anmeldung des Kunden kann ich das Textfeld auslesen und den String zerlegen in ANzahl und Artikelnummer (vielleicht wäre die ID sinnvoller), aber wie soll das per PHP in den Warenkorb gehen. Über ein kleines Beispiel oder einen Hinweis würde ich mich sehr freuen.
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Fr 4. Nov 2011, 17:15

Hallo,
ich komme hier einfach nicht weiter. Ich brauche eine Funktion, die bei Aufruf Objekte per Übergabe von ID und Anzahl in den Warenkorb legt. Wenn jemand weiß wie das geht, bitte melden. Ich bezahle auch gerne dafür, ist ja scheinbar keine triviale Sache.
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

AndreasWitt

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon AndreasWitt » Di 8. Nov 2011, 14:07

Hallo Luigii,

ich denke, dass in der Tat nicht ganz so einfach ist. Aktuell funktioniert der Shop ja so, dass immer ein Artikel nach dem anderen in den Shop gelegt wird und das mittels:

Code: Alles auswählen

<we:a edit="shop" shopname="demoShop" id="self" amount="n"></we:a>
Daraus erzeugt dann webEdition einen URL-Link mit folgenden Parameter:

Code: Alles auswählen

?shop_artikelid=' . $IDdesArtikels . '&shop_anzahl=' . $amount . '&type=' . $typDesArtikels(Objekt/Dokument . '&t=' . time() . '&we_variant='. $varianteDesArtikels . '&shopname=' . $shopname;
In deinem Warenkorb-Template musst du ja zu Beginn folgende we-Tags nutzen:

Code: Alles auswählen

<we:sessionStart /><we:createShop shopname="demoShop" /><we:addDelShopItem shopname="demoShop" />
Ich gehe davon aus, dass <we:addDelShopItem> die Request-Variablen des o.g. URL-Links auswertet und diese dann in den Warenkorb übergibt. Daher wäre vielleicht folgendes eine Lösung:

Code: Alles auswählen

<we:sessionStart />
<we:createShop shopname="demoShop" />

<we:comment>Start: erster Artikel</we:comment>
<?php
$_REQUEST['shop_artikelid'] = $IDdesArtikels;
$_REQUEST['shop_anzahl'] = $AnzahldesArtikels;
$_REQUEST['type'] = $TypdesArtikels; // "o" fuer Objekt und "w" fuer Dokument (glaube ich jedenfalls)
$_REQUEST['t'] = time();
$_REQUEST['we_variant'] = $VariantedesArtikels; //falls vorhanden
$_REQUEST['shopname'] = $ShopName; //Name des Shops
?>
<we:addDelShopItem shopname="demoShop" />
<we:comment>Ende: erster Artikel</we:comment>

<we:comment>Start: n. Artikel</we:comment>
<?php
$_REQUEST['shop_artikelid'] = $IDdesArtikels;
$_REQUEST['shop_anzahl'] = $AnzahldesArtikels;
$_REQUEST['type'] = $TypdesArtikels; // "o" fuer Objekt und "w" fuer Dokument (glaube ich jedenfalls)
$_REQUEST['t'] = time();
$_REQUEST['we_variant'] = $VariantedesArtikels; //falls vorhanden
$_REQUEST['shopname'] = $ShopName; //Name des Shops
?>
<we:addDelShopItem shopname="demoShop" />
<we:comment>Ende: n. Artikel</we:comment>
Wenn du dann noch dynamisch bestimmen möchtest, welche Type (Objekt oder Dokument) dein Artikel hat, kannst du das natürlich noch anders ermitteln. Wenn du Varianten oder CustomFields nutzt, musst du die neben der Anzahl und der ID des Artikels natürlich auch beim Kunden speichern.

Das oben genannte Beispiel ist nicht getestet und ohne Garantie ... habe ich mir eben mal kurz überlegt. Wenn du professionelle Hilfe benötigst, lass es mich wissen!

Grüße, Andreas
Zuletzt geändert von AndreasWitt am Di 8. Nov 2011, 14:32, insgesamt 1-mal geändert.

AndreasWitt

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon AndreasWitt » Di 8. Nov 2011, 14:08

... noch ein kleiner Hinweis: Der Beitrag wäre besser im Unter-Forum "Shop-Modul" aufgehoben ;)

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Di 8. Nov 2011, 14:28

wow, das sieht nach einem Interessanten Ansatz aus.
Ich hab immer versucht etwas direkt in die Session zu schreiben.
Das probiere ich nachher gleich mal aus. Wenn das klappen würde, ist es ja doch relativ einfach. :D

Und ja, richtig, gehört eigentlich ins Unterforum. Wenn es also jemand verschieben mag, so kann er das gerne tun. Ich glaube ich kann das nicht selber machen, oder?
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

AndreasWitt

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon AndreasWitt » Di 8. Nov 2011, 14:39

... lass und bitte deine Testergebnisse wissen!

Grüße, Andreas

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Mi 9. Nov 2011, 09:49

Hallo Andreas,
gestern habe ich den Code in mein Projekt eingebaut und tatsächlich werden Artikel in den Warenkorb gelegt.
Varianten habe ich nicht, ich habe also aus einem Feld in der Kundenverwaltung, in dem ich immer den aktuellen Zustand des Warenkorbs in Anzahl und ObjektID speichere, die Daten ausgelesen und dann in einer foreach-Schleife durchlaufen.
Hier wurde anfangs immer nur der erste Artikel in den Warenkorb geschrieben. Das lag an folgender Variable

Code: Alles auswählen

$_REQUEST['t'] = time();
Der Wert dieser Variable ist bei allen Durchläufen gleich, da die Schlaife ja recht schnell durchlaufen wird. Ich habe dann einen Zähler mitlaufen lassen und den Wert der Variable bei jedem Durchlauf um eins erhöht und siehe da, alle Produkte landen im Warenkorb. Der Wert für diese Variable muss also eindeutig sein.

Jetzt habe ich natürlich das Problem, dass, wenn ich viele Produkte im "gespeicherten Warenkorb" habe, ich immer weiter in die Zukunft gerate, so dass ich dann wahrscheinlich keine Produkte mehr in den Warenkorb legen kann, die den gleichen Timestamp haben, wie Produkte, die schon enthalten sind. Also werde ich das mit dem Zählen wohl noch ändern und den Wert der Variable t lieber jeweils um 1 veringern. Da die Wiederherstellung des gespeicherten Warenkorbs ja geschieht, bevor jemand neue Produkte in den Warenkorb legt, dürfte das kein Problem geben.

Also erst einmal lieben Dank für die Hilfe, Du hast was gut bei mir.
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Mi 9. Nov 2011, 10:02

Nochmal zu t:
Mir fällt gerade auf, dass das nur in meinem Projekt so ist, dass man sich einloggen muss, bevor man etwas in den Warenkorb legen kann. In anderen Shops kann es durchaus sein, dass man schon Produkte im Warenkorb hat, sich einloggt und der Warenkorb dann um den gespeicherten Warenkorb erweiteret werden soll. In dem Fall muss man das mit dem Wert für t anders lösen. Ich denke, wenn man da den Startwert des Zählers auf die Anzahl der Sekunden eines ganzen Tages setzt (86400), ist man auf der sicheren Seite.
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

AndreasWitt

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon AndreasWitt » Mi 9. Nov 2011, 10:06

... freut mich erstmal, dass es prinzipiell klappt.

vielleicht solltest du auch einfach bei 0 anfangen? Viel weiter in die Vergangenheit eines Tages kann man ja nicht. Oder du speicherst den Zeitstempel des Artikels beim ersten in den Warenkorb legen mit in der KV des Kunden?

Grüße, Andreas

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Mi 9. Nov 2011, 14:44

Das mit der Null vertshe ich nicht. Wenn ich von der jetzigen Sekunde immer nur n+=1 abziehe, dann lande ich vielleicht auf einem Zeitpunkt zudem ich vorher schon ein Produkt in den Warenkorb gelegt habe.
Ich speichere der Einfachheit halber immer den gesamten Warenkrod in einem KV-Feld und überschreibe immer wieder den Inhalt. Im Warenkorb habe ich keine Zeitstempel mehr. Der Zeitstempel wird, glaube ich, nur benutzt um eine eindeutige ID für den Eintrag in die SESSION zu generieren, oder sehe ich das falsch?
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.

Luigii
Senior Member
Beiträge: 454
Registriert: Mi 20. Jul 2005, 17:18

Re: Artikel im Warenkorb dauerhaft speichern

Beitragvon Luigii » Mo 14. Nov 2011, 11:31

Noch ein Nachtrag:
Es scheint so zu sein, der der erste EIntrag im Warenkorb der älteste sein muss. Wenn ich $_REQUEST['t'] in der Schleife immer weniger werden lasse, dann bekomme ich nur einen Eintrag im Warenkorb.
Ich mache es also jetzt so, dass ich mit genau einem Tag in der Vergangenheit starte und dann in der Schleife den Wert für $_REQUEST['t'] erhöhe. Das funktioniert.
Dinge von großer Bedeutung gehe man mit Leichtigkeit an, Dinge von geringer Bedeutung mit großem Ernst.


Zurück zu „Shop Modul“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste