Bu makalemizde uygulama geliştirirken kullandığımız kategori-alt kategori mantığına değineceğiz. Genelde tercih ettiğimiz kategori-alt kategori mantığı bir kategori bir alt kategori tablosu olur. Ancak kriter sayısı arttıkça her işlem için ayrı tablolar açmak zorunda kalırız. İşte bu tıkanıklığın önüne geçmek için kullandığımız sınırsız kategori mantığına değineceğiz bu makalede.
Sınırsız kategori demek, belli bir kategori sayısına bağlı kalmadan, kategoriler ve alt kategoriler için tablo oluşturmadan, bütün işlemlerimizi bir tablo ve bir stored procedure ile yaptığımız kategori mantığıdır.
Bu işlem için dilerseniz önce kategori tablomuzu oluşturalım ve içerisine birkaç veri girelim. Aşağıdaki kodu çalıştırarak kategori tablosunu oluşturabilirsiniz.
CREATE TABLE [dbo].[tblKategori](
[fldKategoriId] [int] IDENTITY(1,1) NOT NULL,
[fldKategoriAdi] [nvarchar](50) NULL,
[fldUstKategoriId] [int] NULL,
CONSTRAINT[PK_tblKategori] PRIMARY KEY CLUSTERED
(
[fldKategoriId] ASC
)WITH(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Bu tabloda üst kategori idsi 0 olan verilerimiz bizim ana kategorimiz olacak. Ve buradan itibaren kırılımlarımız başlayacak. Aşağıdaki veriyi incelerseniz idsi 0 olan satırlarımızın ana kategori olduğunu göreceksiniz. Tablodaki kategori-alt kategori ilişkisi ise KategoriId ile UstKategoriId arasında.
|
fldKategoriId |
fldKategoriAdi |
fldUstKategoriId |
|
1 |
Elektronik |
0 |
|
2 |
Bilgisayar |
1 |
|
3 |
Beyaz Eşya |
1 |
|
4 |
Küçük Ev Aletleri |
1 |
|
5 |
Saç Kurutma Makinası |
4 |
|
6 |
Buz Dolabı |
3 |
|
7 |
Çamaşır Makinası |
3 |
|
8 |
Laptop |
2 |
|
9 |
Masaüstü Bilgisayar |
2 |
|
10 |
Casper |
9 |
|
11 |
Exper |
9 |
Örnek: Exper ve Casper kategorisinin üst kategori idsini 9 olarak belirtmişiz. Tabloda 9 numaralı kategori Masaüstü Bilgisayar kategorisine karşılık geliyor. Yani Exper ve Casperin üst kategorisi Masaüstü Bilgisayar. Şimdi buraya dikkat edecek olursak; masaüstü bilgisayar kategorisinini üst kategorisi ise 2 ye karşılık geliyor. Yani masaüstü bilgisayarın da bir üst kategorisi olduğunu anlayabiliriz. 2 numaralı kategori ise Bilgisayar kategorisine karşılık geliyor. Yani Masaüstü Bilgisayar da Bilgisiyara kategorisine ait. Bu şekilde kırılımları izleyerek mantığı anlayabilirsiniz. Şimdi Kategori class ını oluşturup verileri çekeceğimiz metodumuzu yazalım.
public class Kategori
{
publicint KategoriId { get;set; }
publicstring KategoriAdi { get;set; }
publicint UstKategoriId { get;set; }
publicKategori()
{
}
publicList<Kategori> GetKategori(int KategoriId)
{
List<Kategori> lstKategori = new List<Kategori>();
Databasedb = new Database();
SqlParameter[] param = new SqlParameter[] { new SqlParameter("@UstKategoriId",KategoriId) };
DataTabledt = db.ExecuteProcedure("sp_GetKategori",ref param);
foreach(DataRow item indt.Rows)
{
lstKategori.Add(new Kategori()
{
UstKategoriId=Convert.ToInt32(item["fldUstKategoriId"]),
KategoriAdi=item["fldKategoriAdi"].ToString(),
KategoriId=Convert.ToInt32(item["fldKategoriId"])
});
}
returnlstKategori;
}
}
Bu classta oluşturduğumuz GetKategori() metodu verdiğimiz kategori idsine ait verinin kırılımlarını getirecek. Çektiğimiz veriler ile bir <ul><li></li><ul> yapısında bir menü oluşturduğumuzu varsayarsak, aşağıdaki kod ile bu menüyü oluşturmuş olacağız. İlk önce “menu” adında bir string değişken oluşturalım ve yazacağımız html kodumuzu bu değişken içerisine atayalım.
string menu = "";
private voidKategorileriGetir()
{
List<Kategori> lstGetKat = newKategori().GetKategori(0);
menu = "<ul>";
foreach (Kategori anaKategori inlstGetKat)
{
menu += "<li>"+ anaKategori.KategoriAdi + "</li>";
altmenu(Convert.ToInt32(anaKategori.KategoriId));
}
menu += "</ul>";
haberIcerik.InnerHtml = menu;
}
private void altmenu(int kategoriId)
{
List<Kategori> lstGetKat = newKategori().GetKategori(kategoriId);
if(lstGetKat.Count() == 0)
{
}
else
{
menu += "<ul>";
foreach(Kategori kategori inlstGetKat)
{
menu += "<li>--"+ kategori.KategoriAdi + "</li>";
altmenu(Convert.ToInt32(kategori.KategoriId));
}
menu += "</ul>";
}
}
Buradaki kodu inceleyecek olursak KategorileriGetir() metodunda ilk önce “0” ile rottaki kategorileri çekiyoruz. Daha sonra ise her kategorinin içerisine liste halinde o üst kategoriye ait listeyi çekiyoruz. Yazdırdığımızda ise çıktımız aşağıdaki şekilde oluyor.
- Elektronik
- --Bilgisayar
- --Laptop
- --Masaüstü Bilgisayar
- --Beyaz Eşya
- --Buz Dolabı
- --Çamaşır Makinası
- --Küçük Ev Aletleri
Umarım anlatabilmişimdir. Faydalı olması dileğiyle ;)