1.955 kez okundu

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

10 10 1.955 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

Yoruma kapali.

Barış Ozcan Facebook Sayfasi
Barış Ozcan Twitter