Du kunne oprette en tabel i din database, hvor du gemmer referencer til de varer kunden har puttet i kurven.
Der udover skal du generere en nøgle som lægges i en cookie og samtidig benyttes til de varer som kunden har lagt i kurven, dvs. et felt i databasekurven skal være cookienøglen.
Kurvtabellen kunne se således ud:
Kurv =
noegle
+ vareid
+ antal
+ pris
Så kunne din klasse bla. indeholde følgende:
Class Kurv
Private dicKurv
Private ckey
Private Sub Class_Initialize()
dim sql, cmd, rs, objVare
set dicKurv = Server.CreateObject("Scripting.Dictionary")
ckey = Request.Cookies("BASKET") & ""
if ckey = "" then
'opretter nøglen til kurven
ckey = GenerateCookieKey()
Response.Cookies("BASKET") = ckey
Response.Cookies("BASKET").ExpiresAbsolute = DateAdd("h", 1, now)
else
'henter kurven
sql = "SELECT * FROM kurv WHERE noegle = ?"
set cmd = GetCommandObj(sql)
set rs = cmd.Execute(, array(ckey))
do while not rs.eof
set objVare = new Vare
objVare.Id = rs("vareid")
objVare.Antal = rs("antal")
objVare.Pris = rs("pris")
dicKurv.Add "v" & rs("vareid"), objVare
rs.movenext
loop
rs.Close
end if
call upd8_kurv_total()
End Sub
Private Sub Class_Terminate()
dim sql, cmd, objVare
'sletter kurven
sql = "DELETE kurv WHERE noegle = ?"
set cmd = GetCommandObj(sql)
cmd.Execute , array(ckey)
'gemmer kurven med evt. opdateringer
sql = "INSERT INTO kurv (noegle, vareid, antal, pris) VALUES(?,?,?,?)"
set cmd = GetCommandObj(sql)
for each objVare in dicKurv
With objVare
cmd.Execute , array(ckey, .Id, .Antal, .Pris)
End With
next
End Sub
Private Function GetCommandObj(sql)
dim cmd
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandType = 1
cmd.CommandText = sql
set GetCommandObj = cmd
End Function
' anden logik til klassen her
' ... bla GenerateCookieKey
End Class
For at dette fungerer skal du implementere en metode på klassen (eller en funktion udenfor), som hedder GenerateCookieKey, der returnerer en nøgle som entydigt identificerer kurven ifht. den aktuelle bruger.
NB: Du skal være opmærksom på at hvis brugeren vælger samme vare to gange i shoppen, så skal varen i kurven opdateres med et nyt antal, da grundlaget for nøglen til dictionaryobjektet er vareid og der kan ikke eksistere to elementer i et dictioaryobjekt med samme nøgle.
Desuden skal der laves en klasse som hedder Vare med de værdier der nu skal gemmes om en vare i kurven (i mit eksempel er der 4 værdier). Noget i stil med dette:
Class Vare
Public Noegle
Public Id
Public Antal
Public Pris
End Class
Dette er naturligvis en helt simpel udgave af et vareobjekt og du har sikker andre oplysninger og funktioner du ønsker at knytte til en vare, men det er udenfor scopet af denne illustration ;-)