Asp.Net VB.Net Session Sepet Yapmak

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.

Henüz Yorum Yazılmamış
  •  
Yorum Önizleme
  •  
Yorum Yazın
İsminiz
* zorunlu
E-Posta
* zorunlu [gizli kalacak]
Web
Yorumunuz
Site İçi Arama
Takipte Kalın
Rss beslemesine abone olun Yeni yazıları eposta ile alın Profesyonel Linkedin ağıma katılın Facebook arkadaş listenize ekleyin Friendfeed ile takip edin ve yorumlayın Twitter ile takip edin Vimeo ağımdaki videoları izleyin
Twitter'dım :)
Son Yorumlar
© 2011 Alptekin Bodur