andrzej7322
2.06.2011, 22:08:59
Witam,
Mam mały problem z funkcjonowaniem koszyka w sklepie internetowym.
Zastanawiam się nad działaniem koszyka i przechowalni w sklepie internetowym.Podczas tworzenia sklepu zmanipulowałem taka sytuacje ze dwóch klientów chce kupić jeden produkt w tym samym momencie lecz dostępna jest tylko jedna sztuka.
W takim przypadku dochodzi do sytuacji, że jeżeli jeden z nich będzie szybszy to ten drugi podczas realizowania zamówienia dostanie komunikat, że ktoś był szybszy i produkt już nie jest dostępny żeby uniknąć takiej sytuacji postanowiłem zrobić tak, ze podczas gdy zalogowany użytkownik dodaje produkt do koszyka to dostępność danego produktu zmniejsza się o odpowiednia ilość. Lecz gdy np użytkownik wyloguje się i nie kupi produktu to jego koszyk czyści się i dostępność powraca do poprzedniego stanu.Lecz jeżeli się nie wyloguje to cron po 30 minutowej nieaktywności wyczyści jego koszyk. Problem polega na tym ze przy tym rozwiązaniu użytkownik niezalogowany nie może nic dodawać do koszyka oraz nie mogę stworzyć przechowalni. Chciałbym dowiedzieć się w jaki sposób rozwiązać ten problem żeby nie pokazywać komunikatów typu ktoś cie uprzedził.
Nie oczekuję gotowego kodu php, lecz proszę o wskazówki teoretyczne.
Z góry dziękuje za pomoc.
kiedy ktoś jest nie zalogowany to również odejmujesz produkt ze stanu, dodajesz do koszyka, którego zawartość przechowujesz w jakiejś sesji. Jakąś informację zapisujesz w bazie, że jest produkt gdzieś w koszyku. Po 30 minutach tak samo czyścisz i przywracasz do stanu normalnego.
Tak naprawdę najlepszym rozwiązaniem byłoby informowanie na bieżąco o produktach z koszyka. Choćby co przeładowanie strony, by w razie czego dostarczyć informację, że produkt chwilowo już jest niedostępny osobom, które mają go jeszcze w koszyku, ale nie zakupiły.
Właściwie to już przy bardzo niskich zapasach magazynowych informowałbym użytkownika, że w każdej chwili może zabraknąć towaru i transakcja może nie dojść do finalizacji oraz udostępniłbym w takiej sytuacji coś w rodzaju "zatrzymaj dla mnie w koszyku" i dopiero to bym odejmował od stanu, tak by użytkownik miał pewność, iż do końca transakcji nie zdąży nikt mu ostatniej sztuki "podwędzić". Oczywiście własny session_handler, który by w czasie zniszczenia sesji "zwrócił" do magazynu "zaklepane" produkty - obowiązkowy. Ogólnie rzecz biorąc - musiałbyś mieć mechanizm rezerwowania danej pozycji koszyka jako pewniak gdy dany produkt zacznie się zbliżać do granicy wyczerpania. Lepiej poinformować usera, by sam na to uważał i produkt zaklepał, niż się miał rozczarować w trakcie finalizacji zakupu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.