1.857 kez okundu

Asp de recursive ile sınırsız kategori listeleme nasıl yapılır

10 10 1.857 kez okundu incelendi

Merhaba arkdaşlar bu dersimizin konusu e-ticaret sitelerinde ürün kategorisi oluşturuken veya CMS sistemlerde menü ve alt menüler tasarlamada kullanılan sınırsız kategori sistemi.İlk olarak sınırsız kategorileme için veritabanının nasıl oluşturulacağını inceleyelim.Örneğin bir e-ticaret uygulaması için veritabanı tablo yapımız şu şekilde olsun.

http://resim.sanalkurs.net/uploads/1_559.jpg
Yukarıdaki tablo yapısında her kaydın bir KATEGORI_ID, KATEGORI_UST_ID ve KATEGORI_AD değerleri bulunmakta.KATEGORI_ID değeri primary key otamatik artan özelliklerine sahip olmalı.Ana kategorilerin KATEGORI_UST_ID değeri 0 olmalı.

Her kayıttaki KATEGORI_UST_ID değeri kayıt hangi kategoriye ait ise o kategorinin KATEGORI_ID değerini almalıdır.Yukarıdaki örnekte Elektronik ve Donanım kategorileri ana kategori olduğu için KATEGORI_UST_ID değerleri 0’dır.Anakart ve Kart Okuyucular, Donanım kategorisine ait oldukları için KATEGORI_UST_ID değerleri 2 dir.AMD ve INTEL ise Anakart kategorisine ait olduğu için KATEGORI_UST_ID değerleri 3 dür.

Kategorileme mantığını bu şekilde anlatmaya çalıştık.Şimdi gelelim bu oluşturulan tablodaki kayıtları, her kategori altında alt ketegorisi görüntülencek şekilde listelemeye.Bunun için sub prosüdürü ve recursive yöntemini kullanıcağız.

Öncelikle bir asp sayfası açıp sub prosüdürümüzü oluşturalım.

<%
sub subRecursive(ParentID, intLevel)
dim objRs
dim strSql
strSql = "SELECT KATEGORI_ID, KATEGORI_AD FROM tblKategori WHERE KATEGORI_UST_ID = " & ParentID     'tblKategori tablomuzdaki KATEGORI_UST_ID değeri sub'dan gelen ParentID değişkeni ile sorgulanıyor.
set objRs = objConn.Execute(strSql)  'Sorgumuzu çalıştırıyoruz.
' Sorgu sonuçlarını do while döngüsü ile listeliyoruz.
if Not objRs.EOF then
do while Not objRs.EOF
%>
<tr>
<td>
<img src="bosluk.gif" border="0" width="<%=25*intLevel%>" height="1">
<!--bosluk.gif  width değerini initLevel değişkeni ile değiştirip alt kategorilerin soldan girintli şekilde listelenmesini sağlıyoruz.->
<a href="icerik.asp?id=<%=ObjRs("KATEGORI_ID")%>"><%=ObjRs("KATEGORI_AD")%></a></td>
</tr>
<%subRecursive objRs("KATEGORI_ID"), intLevel + 1
objRs.MoveNext
loop
end if
if Not objRs Is Nothing then
objRs.Close
end if
set objRs = Nothing
end sub
%>

– sub subRecursive(ParentID, intLevel) komut satırında ParentID değişkeni üst kategorimizin id değeri için, intLevel değişkeni kategorilere soldan boşluk bırakmak için kullancağız.
– strSql = “SELECT KATEGORI_ID, KATEGORI_AD FROM tblKategori WHERE KATEGORI_UST_ID = ” & ParentID Burada tblKategori tablomuzdaki KATEGORI_UST_ID değeri sub’dan gelen ParentID değişkeni ile sorgulanıyor.

– subRecursive objRs(“KATEGORI_ID”), intLevel + 1
komut satırında subRecursive prosedürünü kendi içerisinde çalıştırarak bir kategorinin alt kategorilerini sorgulatıp listelemiş oluyoruz.

Daha sonra veritabanı bağlantı kodlarını yazıp oluşturduğumuz prosedürü bir tablonun table tagları içerisinde çalıştırıyoruz.

   <table border="0" cellpadding="0" cellspacing="0" width="779">
<%
dim strConn
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("veritabani.mdb")
set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
subRecursive 0, 0 ' Prosedürümüzü değişkenler 0 dan başlayacak şekilde çalıştırıyoruz.
objConn.Close
Set objConn= Nothing
%>
</table>

Sonuç:
http://resim.sanalkurs.net/uploads/2_471.jpg

Sınırsız kategorileme mantığını ve listelenmesini ayrıntıya girmeden anlatmaya çalıştım.Kodlar biraz incelenirse daha anlaşılır olacaktır.

İyi kodlamalar.:)

Kaynak dosyayı indirmek için tıklayın

Paylaş !

Yoruma kapali.

Önceki yazıyı okuyun:
Asp de tablo nasıl yapılır

Evet arkadaşlar bu dersimizin sonunda otomatik tablo oluşturabileceğiz! İlk önce merhabalar gerekli dosyalarımızı belirteyim.Dersimize başlayalım. Bir "veri.mdb" adlı bir acces...

Kapat
Barış Ozcan Facebook Sayfasi
Barış Ozcan Twitter