MYSQL PHP İle Sınırsız Kategori Yapımı

Merhaba, bu yazımda sizlere sınırsız kategorilendirme sisteminden ve yapılışından bahsedeceğim.

Bu projenin amacı tıpkı e-ticaret sitelerinde olduğu gibi bir ürünü veya bir konuyu belirli temel etiketler altına kategorize etmeyi sağlamaktır. Bu kategorilendirme işlemi belirli tanımlarla değişip alt alta farklı kategoriler oluşturmakla kalmayıp diğer ana kategorilerin düzenli ve disiplinli bir şekilde görüntüleye bilme imkânı sağlıyor.

Kategorilendirme sistemi Veritabanı verileriyle oluşmakta, bu veriler aracılığı ile kategori adlarını ve numaralarını birbirleriyle ilişkilendirerek Treeview adını verdiğimiz klasörlü görünümü elde ediyoruz. Bu işlemi oluşturduğumuz php fonksiyonu ile kullanışlı bir halde sunacağım.

Yapımına başlayalım; Öncelikle veritabani adında oluşturduğumuz sql dosyasını ekleyelim.

Burada id, kategori, kategori_link ve kategori_ust adında 4 sütunumuz olacak.

Veritabanı yapısı;

Veritabanı bağlantımız baglan.php;

Veritabanı bağlantısını oluşturduktan sonra sıra gelelim kategori ekleme sayfasına, index üzerinde inşa ettiğimiz formda iki alanımız olacak, bunlardan birisi kategori adını gireceğimiz [input type=text name=kategori] ve daha önce oluşturduğumuz kategori adlarının listelendiği [select option name=kategori_ust] alanımız.

Select içerisine ufak bir php SELECT sorgusu ile option arasına kategorileri ve id değerlerini çekiyoruz. Disabled ile belirtiğimiz option’lar ana kategori olarak başta gözükecek.

Burada dikkatinizi çeken kısım olmuştur. Kategoriler adında bir sabit dizi ve içerisinde kategori ve kategori_ust adında ikinci bir dizi. Bu dizler içerisine tıpkı sorguda olduğu gibi bazı değerler atıyoruz. Kategori ikinci dizisine bütün kategori değerlerini çekiyoruz, diğer bir dizi olan kategori_ust dizisine foreach esnasındaki kategorinin üst değeri ile o kategorinin kendi id değerini diziye ekliyoruz. Bu sayede daha sonra Treeview için kullanacağız.

index.php;

Form içerisinde oluşturduğumuz kategori adını veritabanına eklemek için kategori.php sayfasına bakalım. Kategori adını ve kategori_ust değerini değişkene aktarıp kategori_link değerini ise kategori postunu seo fonksiyonu ile harici karakterlerden temizliyoruz. Ve Insert işlemi yapıyoruz. Ekleme işlemi tamamlandığı takdirde index sayfasına yönlendirme işlemi yapıyoruz.

 

Sıra geldi Treeview yani kategorilerin sıralı bir şekilde listeleme işlemi. Bu işlemi daha önce bahsettiğim gibi php fonksiyonu ile gerçekleştirmek gerekiyor, çünkü iç içe geçen kategoriler aynı işlemleri tekrarlanması ile gerçekleşiyor, bunun için kategori($id,$kategoriler) adında iki parametreli bir fonksiyonumuz var id yerine 0 yazarak varsayılan ilk sorguyu başlatıyoruz. Kategoriler adı ile oluşturduğumuz diziyi burada ekleyerek çözümlüyoruz.

Fonksiyon Açıklaması

1.    Numaralı satırda kategori_ust dizisinde belirtilen id değerinde bir grup varsa işlem başlar.
2.    Bu satırda liste tagını ekliyoruz.
3.    Kategori_ust dizisini döngüye 0 alt dizinini numara değişkenine çekiyoruz.
4.    Burada kategori_ust->0 alt dizininde bulunan değer kategori_ust içinde kendi dizini yoksa.
5.    Benzer dizin yoksa kategori dizininde o id ye ait kategori adını listeye ekler.
6.    --.
7.    Burada kategori_ust->0 alt dizininde bulunan değer kategori_ust içinde kendi dizini varsa.
8.    Öncelikle numaraya eşit olan kategori adını listeye ekler
9.    Kendi alt dizini olan numaranın alt kategorilerini çekmek için fonksiyona o dizinin numarası eklenir.
10.    Fonksiyon tamamlanınca kategoriyi kapanış tagıyla bitirir.
11.    Listeyi tamamlamak için kategoriye kapanış verir
12.    Liste değişkenini daha sonra return edilir.
13.    Son olarak echo ile return edilen değer ekrana yazılır.
 

Basit bir şekilde açıklamak gerekirse sistem kategori_ust üzerinde çalışır, eğer belirli bir numara altında toplanmış farklı id değerleri varsa o numara kendi altında bulunan idlerin kapsayıcısıdır.

Fonksiyon;

Dosya linkini sizlere arşivleyerek sunuyorum.

Yorum, görüş ve önerilerinizi benimle paylaşın. Beğenerek, oylayarak ve paylaşarak katkı sağlaya bilirisiniz. Teşekkürler.

Dosya Linki: Buradan