
Asp.Net VB.Net Session Sepet Yapmak
Genelde e-ticerat sitelerinde uygulanan bildiğimiz market sepetlerinin
dijital olanı asp.net sayfamız için vb.net kullanarak yapalım.
Gerekli yerlerde kullandığımızda oluşabiliecek hatalarının önüne geçmek için sepet ve urun adında iki sınıf tanımlayalım! Daha sonra bu sınıflar üzerinden Session("sepet")'i yöneteceğiz.
Urun.vb
Public Class Urun
'ürüne ait kayıt olan benzersiz sayi
Public Property id As Integer
'ürün adı
Public Property adi As String
'ürünün fiyatı
Public Property fiyat As Double
'sepet güncelle ve toplamı için adet
Public Property adet As Integer
'ürün fiyatı ile adeti çarpıp bir kalemdeki toplamı
Public ReadOnly Property ToplamFiyat As Double
Get
Return adet * fiyat
End Get
End Property
End Class
Sepet.vb
'tanımladığımız urun sınıfını liste olarak alıyoruz
Public urunler As Dictionary(Of Integer, Urun) = Nothing
Public Sub New()
'sınıf ilk çağrıldığında sepetle ürünü ilişkilendiriyoruz.
urunler = New Dictionary(Of Integer, Urun)()
End Sub
'yukarda oluşturduğumuz listeye eleman eklemek için
Public Sub Ekle(ByVal u As Urun)
If urunler.ContainsKey(u.id) Then
'zaten listede(yani sepette varsa) sadece adetini 1 artırıyoruz
urunler(u.id).adet += 1
Else
'listede yoksa benzersiz idsi ile listemize ekliyoruz.
urunler.Add(u.id, u)
End If
End Sub
buraya kadar herşey tamam sayfalarımızda yapacağımız işlemlere geçmeden önce bir kontrol mekanızması oluşturuyorum. Ürünün sepette olup olmadığı geri döndüren bir fonksiyon. Sepette varsa True yoksa False değeri dönecek şekilde ayarlıyorum.
Sepette Varmı Fonksiyonu
Private Function SepetteVarmi(ByVal id As Integer) As Boolean
'önce sunucu tarafında kullanıcının başlattmış olduğu sepet değişkeni varmı onu kontrol ediyorum
'bu kontrol olmazsa doğal olarak hata verecektir.
If Session("sepet") Is Nothing Then
'sepet değişkeni oluşturulmadığı için false değeri döndürüyoruz
Return False
Else
'sepet değişkeni varsa
'oluşturduğumuz sepet sınıfını eşitliyoruz
Dim sepetim As Sepet = DirectCast(Session("sepet"), Sepet)
'global session değişkenini Sepet sınıfımıza bu sınıfıda sepetim isimde bir nesne ile işlem yapmak için tanımladım.
'sepet sınıfı içerisinde benzersiz anahtar sayı olarak urun.id olarak tanımlamıştım.
'bir for döngüsü ile sepet sınıfı içerisi kontrol ediyorum
For Each key As Integer In sepetim.urunler.Keys
'id=kontrol ettiğimiz ürünün idsi
'key ise sepet sınıfında bulunan ürünlerin idsi oluyor
'yani id=key ise ürün seppette var demektir.
If id = sepetim.urunler(key).ID Then
'iki eşit olduğuna göre aynı üründür true değeri döndürüyoruz.
Return True
Else
'sepet sınıfı içerisinde ürün bulunamamıştır. false değeri döndürüyoruz.
Return False
End If
Next
End If
End Function
Sepete Ürün Eklemek Güncellemek İstediğimizde
'ürün eklemek / güncellemek için önce urun sınıfımıza işlem yapacağımız ürün için bir adet oluşturuyoruz.
Dim urun As New Urun
urun.id = 1 'ürünün veritabında kayıtlı olan benzersiz numarası
urun.adi = "ürün adı"
urun.fiyat = 15.5 ' ürün fiyatı
urun.adet = 1
'sepet değişkeni varmı kontrol edelim
If Session("sepet") Is Nothing Then
'sepet değişkeni yok
'sepet değişkeni oluşturup az önce önce oluşturduğumuz yeni ürünü aktarıyoruz.
Dim sepetim As New Sepet()
sepetim.Ekle(urun)
Session("sepet") = sepetim
Else
'sepet değişkeni var içeriğini korumak ve yeni ekleyebilmek için kontrol etmeliyiz
'yazdığımız fonksiyonu çağırıp ürün varmı bakıyoruz.
If SepetteVarmi(urun.id) = True Then
'true değeri dönerse var demektir
'güncelle
Dim id As Integer = urun.id
Dim sepetim As Sepet = DirectCast(Session("sepet"), Sepet)
sepetim.urunler(id).adet += 1
Session("sepet") = sepetim
Else
Dim sepetim As Sepet = DirectCast(Session("sepet"), Sepet)
sepetim.Ekle(urun)
Session("sepet") = sepetim
End If
End If
Sepeten Çıkarmak istediğimizde
Dim id As Integer = 'çıkarmak istediğimiz ürünün idsi
'sepeti çağırıyoruz
Dim sepetim As Sepet = DirectCast(Session("sepet"), Sepet)
'sepet sınıfı içindeki ürünü siliyoruz
sepetim.urunler.Remove(id)
yaptığımız bu değişikliği global sepet değişkenine de yansıtıyoruz
Session("sepet") = sepetim
Sepet içeriğine erişmek listemek istediğimizde
'sepeti çağırıyoruz
Dim sepetim As Sepet = DirectCast(Session("sepet"), Sepet)
'for döngüsü ile tüm elemanları alabiliyoruz.
For Each i As Integer In sepetim.urunler.Keys
Response.Write(sepetim.urunler(i).id)
Response.Write(sepetim.urunler(i).adi)
Response.Write(sepetim.urunler(i).fiyat)
Next
Umarım faydalı olmuştur.