Merhaba arkadaşlar, bu konuyla ilgili yeni başlayanların ya da kendini geliştirmekte olanların ciddi problemleri olduğunu düşündüğüm için bu konuyu açtım kendi yazdığım gelişmiş bir örnekle bu konuyu anlaşılır ve basit bir hale getireceğini düşünüyorum. Bu mantıkta karışık bir durum söz konusu değil, fonksiyon kendini falan da çağırmıyor kafanız karışmıyor.

Öncelikle tablomuzu tanıyalım,

	id	|	adi			|	parent	|	level		|	isActive	
	1	|	1. Kategori		|	0		|	1		|	1
	2	|	1. Kategori-1	|	1		|	2		|	1
	3	|	1. Kategori-2	|	1		|	2		|	1
	4	|	1. Kategori-2-1	|	3		|	3		|	1
	5	|	2. Kategori		|	0		|	1		|	1
	6	|	2. Kategori-1	|	5		|	2		|	1

	//Yani
	Görünmeyen En Üst Kategori yani id:0
	└1. Kategori (id:1,parent:0,level:1)
	  └1. Kategori-1 (id:2,parent:1,level:2)
	  └1. Kategori-2 (id:3,parent:1,level:2)
	   └1. Kategori-2-1 (id:4,parent:3,level:3)
	└2. Kategori (id:5,parent:0,level:1)
	  └2. Kategori-1 (id:6,parent:5,level:2)

	//id eşsiz bir değer, kategoriyi bundan sonra çağıracağımız adıdır.
	//adi metin bir değer, kategori'nin görünen adı olacak.
	//parent, kategori'nin eğer bir alt kategori ise üst kategorisinin eşsiz numarası
	//level, kategori'nin kaçıncı derece alt kategori olduğu, bu bize kategorileri html olarak gösterirken gerekecek bir parametre
	//isactive'de kategori'nin aktif olup olmadığını kontrol eden bir değer.
Sistemi şöyle bir anlatayım, sistemi oluştururken bir class ile ihtiyaç duydum class aşağıdaki gibidir. Detaylıca anlatacağım okumaya devam edin.

<?php

		
	class Kategoriler{
	
		var $altKategorileri=array();
		
		function getSubCategoriesArray($parent=0,$level=0,$isActive=1)
		{
			global $db;
			$categories=array();
			$query	=	$db->super_query("select * from kategoriler where isActive=".$isActive." and level=".$level." and parent=".$parent,true);
			
			foreach($query as $kategori){
				if(!empty($kategori)){
				$categories[]=$kategori;
				};
			}
			return $categories;
		}
		
			function getCategoryInfo($catID){
				global $db;
				$veri		=	$db->super_query("select * from kategoriler where id=".$catID);
				return $veri;
				}
		
			function getCategories($parent=0){
					global $db;
					$query	=	$db->super_query("select * from kategoriler where parent=".$parent,true);
						foreach($query as $kategori){
							if(!empty($kategori)){
							$this->altKategorileri[]=$kategori['id'];
							$this->getCategories($kategori['id']);
							}
						}
				}
				
			var $Parents=array();
			
			private function GetCategoryLevel($catID){
				global $db;
				$kategoriler		=		$db->super_query("select level,parent from kategoriler where id=".$catID);
				return array("level"=>$kategoriler['level'],"parent"=>$kategoriler['parent']);
			}
			
			function GetParents($catID){
				global $db;
				if(!in_array($catID,$this->Parents)){$this->Parents[]=$catID;}
				$catData	=	$this->GetCategoryLevel($catID);
				if($catData["parent"]!=0){
					$kategoriler		=		$db->super_query("select id from kategoriler where id=".$catData["parent"]." and level=".($catData["level"]-1));
					$this->Parents[]=$kategoriler['id'];
					$this->GetParents($kategoriler['id']);
				}
				}
		}
?>
Kategoriler->getCategoryInfo(KATEGORI_EŞSİZ_NUMARASI[id]);

Direkt olarak kategori id'sini verdiğinizde size o kategorinin bütün sütunlarını getirir.

Kategoriler->getCategories(KATEGORI_EŞSİZ_NUMARASI[parent]);

Direkt olarak kategori id'sini verdiğinizde size o kategorinin birinci seviye alt kategorilerinin idlerini Kategoriler->altKategorileri değişkenine yükler.

Yani yukarıdaki örnekten yola çıkarak, Kategoriler->getCategories(0) şeklinde çalıştırırsak:
Kategoriler->getCategories(0 )array(1,5) olacaktır(dizi şeklinde)

Kategoriler->GetCategoryLevel(KATEGORI_EŞSİZ_NUMARASI[id]);

Bu fonksiyon, bize kategori'nin hangi kategorinin alt kategorisi olduğunu ve kaçıncı seviye(level) bir kategori olduğunu döndürecek.

Yani : Kategoriler->GetCategoryLevel(1); şeklinde çalıştırırsak bize cevabı şu şekilde olacaktır
array(level=>1,parent=>0)

Gelelim görünüm olayına



görünümü güzelleştirmek size kalmış, mantık tıkladığınız kategori'nin alt kategorilerini jquery ile içine ul>li olarak yükletmekte.
Bir de gizli input'a kategori'nin eşsiz numarasını yazarsanız(id) böylece istediğiniz ürünü, firmayı vs neyi kategorize etmek istiyorsanız kolayca kategorileyebilirsiniz.

Dosyaları buradan indirebilirsiniz. Sorusu olan arkadaşların sorularını bu konu altında cevaplayabilirim.