Post-Übersicht

Forum » mh_simpleshop » Checkout leert Basket nicht

Write a post ...

«« 1 »»

Author Message

hombo13

Offline Author

Level 1 (86 %)

 

Posts: 5

Schon seit über einem 1 Tag beschäftige ich mich mit dem Shop. Das kann doch nicht so schwer sein, ist es aber. Nachdem endlich - mangels Anleitung - der Shop installiert war, hat die Darstellung und die Bestellung auch geklappt. Nach dem Absenden der Bestellung hätte der potentielle Kunde vielleicht noch einen Wunsch. Er geht zurück zum Shop und bestellt sich gleich noch ein ähnliches oder gleiches Produkt. Im Warenkorb angelangt, klappt alles noch bestens. Jetzt gehts zur Bezahlung/Senden Formular -- und jetzt kommt eben das Problem: da ist noch die Bestellung vom letzten Mal drinn. Das ist falsch.

Nach etwas Forschen in den Tiefen des Codes habe ich die Session-Time-Out runter auf 10 Minuten gesetzt. Die Daten sollen ja nicht 24 Std. in der DB lagern, man muss doch weiter bestellen können. Gut - also habe im File class.tx_mhsimpleshop_pi1.php die Funktion function displayBasket($pid) gefunden und dort den Wert von -3600 (1 Stunde) auf -600 gedreht. Nach erfolgreichem Hundespaziergang hätte ich erwartet, dass alles geleert ist. Ist aber nicht.

Ich hoffe sehr, dass man das in Griff bekommen kann, ansonsten müsste man dem Simple Shop das Prädikat unbrauchbar anhängen.

Noch eine Frage: Was muss man eigentlich im Feld session_id im Datensatz Warenkorb eintragen? Ich habe hier mal eine 1 gesetzt - spielt das eine Rolle? Und Warum sind im Datensatz Warenkorb nochmals die Preisfelder drinnen? Die Preise gibt man doch beim Produkt ein?

Was muss ich im Warenkorb einsetzen? Und warum kommt immer 10 wenn man im Feld Stck. 1 eingibt? Ich schnalls nicht...

Grüsse Chris



This Post was edited 3 times so far, last change on 15. November 09
Posted: 13.11.09, 14:45

Quote

Martin Hesse

Online Moderator

Level 8 (78 %)

 

Posts: 130

Hallo hombo13,

mir gefällt dein leichter \\\"Neben\\\"-Ton nicht. Wie du vielleicht bemerkt hast, gibt es den Shop (noch) nicht offiziell, deswegen gibt es auch (noch) keine Anleitung, weil ich bisher einfach keine Zeit dafür hatte. Klingt logisch, oder? Ich spare mit weitere Kommentare darüber.

Bei mir war die Bestellung eben auch noch drinne, nachdem ich aber den Cache geleert hatte, war sie weg *Smile* :) (Schonmal probiert die Seite nicht cachen zu lassen?)

Die Variabel $validTime ist nur für den Warenkorb verantwortlich. Sie sagt aus, wie lange ein Produkt im Warenkorb gespeichert werden soll.

Im übrigen, alle Benutzer werden über die IP ermittelt, d.h die Bestellungen werden über die IP zugeordnet.

Warenkorb != Kasse

Normal ist es ja so, dass man erst über den Warenkorb zur Kasse kommt. Im Feldversuch hatte das soweit auch immer geklappt.

Du kannst natürlich aber auch die $validTime Variable in der Kasse einbauen. Einfach die Var mit oben anhängen und an das Query hängen:

Language: PHP
  1. function displayCheckout($pid)

  2. {

  3.         #$session                       = $GLOBALS[\\\'TSFE\\\']->fe_user->id;

  4.         $session                        = $_SERVER[\\\'REMOTE_ADDR\\\'];

  5.         $piVar_formId           = t3lib_div::_GP(\\\'formId\\\');

  6.         $piVar_simpleshop       = t3lib_div::_GP(\\\'tx_mhsimpleshop\\\');

  7.         $validTime                      = time()-3600;

  8.        

  9.         $random                         = rand(1000,9999);

  10.         $order_number           = date(\\\'Y\\\', time()) . \\\'-\\\' . $random;

  11.        

  12.        

  13.         $res = $GLOBALS[\\\'TYPO3_DB\\\']->sql(TYPO3_db, \\\"

  14.                 SELECT

  15.                         b.tstamp, b.product, b.piece, b.value, b.tax, b.session_id, b.uid,

  16.                         p.title as productTitle, p.description, p.category, p.picture,

  17.                         c.title as catTitle

  18.                 FROM

  19.                         \\\" . $this->dbTable3 . \\\" b

  20.                         JOIN \\\" . $this->dbTable2 . \\\" p ON b.product = p.uid

  21.                         JOIN \\\" . $this->dbTable1 . \\\" c ON p.category = c.uid

  22.                 WHERE

  23.                         b.session_id = \\\'\\\" . $session . \\\"\\\'

  24.                 AND

  25.                         b.piece > 0

  26.                 AND

  27.                         b.tstamp > \\\" . $validTime

  28.         );

  29.        

  30.         $res2 = $GLOBALS[\\\'TYPO3_DB\\\']->sql(TYPO3_db, \\\"

  31.                 SELECT

  32.                         b.tstamp, b.product, b.piece, b.value, b.tax, b.session_id, b.uid,

  33.                         p.title as productTitle, p.description, p.category, p.picture,

  34.                         c.title as catTitle

  35.                 FROM

  36.                         \\\" . $this->dbTable3 . \\\" b

  37.                         JOIN \\\" . $this->dbTable2 . \\\" p ON b.product = p.uid

  38.                         JOIN \\\" . $this->dbTable1 . \\\" c ON p.category = c.uid

  39.                 WHERE

  40.                         b.session_id = \\\'\\\" . $session . \\\"\\\'

  41.                 AND

  42.                         b.piece > 0

  43.                 AND

  44.                         b.tstamp > \\\" . $validTime

  45.         );

  46. # ....

Sollte funktionieren.

Was muss man eigentlich im Feld session_id im Datensatz Warenkorb eintragen?
Du redest jetzt von der Datenbank-Ebene, oder? Ich kann mich nicht entsinnen, das es da ein Feld im FE für gibt. Dort wird die IP gespeichert von dem Benutzer

Warum sind im Datensatz Warenkorb nochmals die Preisfelder drinne?
Um uns ein erneute Abfrage mit der DB zu sparen, werden die Preise mit in den Warenkorb übertragen, sobald man ein Produkt in sein Warenkorb legt. Ja ich weiß, das hat Vor- und Nachteile, aber für den Kunden, wo ich diesen Shop gemacht hatte, war dies ausreichend. Man könnte natürlich noch ein Preis-Update einfügen, nachdem die Kasse noch einmal aufgerufen wird. Man kann aber auch dem Kunden den Preis zusichern für X Stunden (so lange wie die Waren halt im Warenkorb sind).

Was muss ich im Warenkorb einsetzen? Und warum kommt immer 10 wenn man im Feld Stck. 1 eingibt?

1. ??
2. Kann ich nicht reproduzieren. Bei meinem Test-System, wenn ich da bei Stückzahl 1 eingebe (was ja schon drinnen steht) und dann auf \\\"Warenkorb aktualisieren\\\" klicke, bleibt da 1 stehen. Auch wenn ich die Werte mal wechsel.

Hast du eventuell irgendwas in der Datenbank oder im Code verstellt?

/ Edit, vergess nicht die Slashes zu entfernen wenn du Copy & Paste machst. Hier scheint das Forum noch etwas Buggy zu sein ;-)

Die AGB müsstest du auch noch ändern, ganz oben steht noch eine Falsche Adresse drinne. Bitte ändern, möglichst bald - Danke.

Den Titel für die E-Mail an den Kunden findest du in Zeile 376



This Post was edited 1 times so far, last change on 13. November 09
Posted: 13.11.09, 15:45

Quote


«« 1 »»

Powered by MH-Dev.-Board (c) 2009 MH-Dev. - Webdevelopment.