Recursive ile Sınırsız Kategori Listeleme

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

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.



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ç:


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.:)
  • Etiketler;
İsmail Mercan
1988 Çankırı Ilgaz doğumlu olan yazar, liseyi Ankara Aydınlık Evler Ticaret Meslek Lisesi / Bilgisayar Programcılığı bölümünde bitirdi. Daha sonra Akınsoft Ankara Bölge Müdürlüğünde stajyer olarak görev aldı. <p>2006 yılında halen devam etmekte olduğu Sakarya Üniversitesi Eğitim Fakültesi Bilgisayar ve Öğretim Teknolojileri Bölümüne yerleşerek öğrenimine devam etmektedir. <p>Web Programlama(PHP-MYSQL, ASP, AJAX,CSS, Javascript ) ve Web Tasarım(Photoshop, Fireworks, Dreamweaver,Flash) ile yakından ilgilenen yazar kendi çapında birçok küçük kapsamlı projeye imza atmıştır.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Çok güzel bir çalışma olmuş elinize sağlık
İsmail Mercan Sizden bir ders isteğinde buluna bilirmiyim forumda araştırma yapmadım istediğim ders daha önceden hazırlamış ise özür dilerim benim isteğim bir cms içerik yönetim siteminin mantığı nasıl kodlandığı burdaki en önemli husu ise dinamik içerik sayfaları şimdinden teşekkür ederim
İçerik yönetimi konusunda benden çok çok tecrübeli olduğunu düşündüğüm Abdullah Tekin abinin yazdığı dersin daha faydalı olacağını düşünüyorum.Bu isteği ona belirtmelisin.
Hoccam elinize sağlık bu benim çok işime yaradı fakat bunu geliştirebilmek adına sistemi accordion hale nasıl getirebiliriz. subRecursive 0, 0 ' oynayarak mı? java - ajax- jquery gibi bir eklenti ile ? hangisi ise nasıl :-)
hocam bunu DW CS4 te nasıl yapbiliriz DW de full script oluşturuyorum admin panel de tamam ama iş bu kategori ve ürüne gelince takılı kalıyorum veri tabanı oluşturuyorum ordan sonrası yok DW application bölümünde denemediğim yer kalmadı bu konuda yardımcı olursan çok sevinirim
sn hocam ben kategorilerimi güzel bi tasarım içinde çıkmasını istiyorum örn. ana kategoriye tklayınca alt kategoriler açılacak böyle bişey mümkünmü nasıl yaparız

Yukarı Git