Arkadaşlar hepimiz mysql de mutlaka kategorileme yapmışızdır.Sınırsız kategori,kategori ve alt kategori mantıgı bazen insana kafayı yedirtir.Ben bunları fonksiyon haline getirip kodlamalarınıza dahil etmek için basit bir hale getirdim.
İlk önce
Kategori
-Alt kategori
bu mantıkla işleyen fonksiyonumuzu vereyim.
[php]
function kategori($basla,$limit){
$ust =mysql_query("select * from menuler where menu_aktif=’1′ LIMIT ".$basla.",".$limit."");
while ($don=dizi($ust)){
//bu kısımda menu yapısına göre alt menu varsa bir sorgu yoksa baska sorgu
if($don["altmenu"] == 1){
$ustid=$don[‘id’];
echo ‘<li class="warning"><a href="#">’.$menu_adi=$don["menu_adi"].'</a>’;
$alt =mysql_query("select * from altmenuler where ustid=’$ustid’");
echo ‘<ul class="secondary">’;
//burada kategoriye göre alt menuler dönecek
while($s=dizi($alt)){
echo ‘
<li><a href="#">’.$s["altmenu_adi"].'</a></li>’;
}
}else{
echo ‘<li><a href="">’.$menu_adi=$don["menu_adi"].'</a>’;
}
echo ‘</ul></li></li>’;
}
}
[/php]
Üstteki kodda baslangıç ve limit de verdim isterseniz kullanabilir isterseniz silebilirsiniz.
Mysql tablo yapısı
[code]
`ustmenuler` (`id`, `menu_adi`, `menu_sira`, `menu_icerik`, `menu_aktif`, `altmenu`)
`altmenuler` (`altid`, `altmenu_adi`, `altmenu_icerik`, `altmenu_aktif`, `ustid`)
[/code]
Simdi sınırsız kategori ve alt kategori mantıgının fonksiyonunu vereyim.
Bu Fonksyionumuz
[php]
function SinirsizKategoriListele($kategoriArray , $ebeveyn = 0 , $kademe_pixel = 5 , $i = 0 , $menuler = NULL , $nested = FALSE )
{
// Sayfalar Boşşa boş döndür.
if( empty($kategoriArray) ){
return;
}
// Eğer fonksiyon içinden çağırılmıyorsa
if( !$nested ){
// Sayfaları ebeveyn idsi ile yeni dizi oluştur
foreach($kategoriArray as $row):
$items[$row[‘menu_altid’]][]=$row;
endforeach;
}else{
// Nested ise gelen sayfaları al
$items=$kategoriArray;
}
// Gelen sayfaları aç
foreach( $items[$ebeveyn] as $sayfa ){
// Boşluk hesapla
$bosluk=str_repeat(‘ ‘,($i * $kademe_pixel));
// Menuleri değişkene aktar
$menuler .= ‘<li><a href="#">’.$sayfa[‘menu_baslik’].'</a>’.PHP_EOL;
// Açılan menude bir alt sayfa var ise nested çağır
if(isset($items[$sayfa[‘menu_id’]])){
$menuler .= ‘<ul class="sub-menu">’.PHP_EOL;
$menuler=SinirsizKategoriListele($items,$sayfa[‘menu_id’],$kademe_pixel,($i + 1),$menuler,TRUE);
$menuler .= ‘</ul>’.PHP_EOL;
}
$menuler .= ‘</li>’.PHP_EOL;
}
// Oluşan menüleri return et
return $menuler;
}
[/php]
buda cagırma ve dondurme
[php]
<?php
$sql_kategori=mysql_query("SELECT * FROM menuler order by menu_sira ASC");
$kategori_list=array();
$i=0;
while($row_kategori=mysql_fetch_object($sql_kategori)){
$kategori_list[$i][‘menu_id’]=$row_kategori->menu_id;
$kategori_list[$i][‘menu_baslik’]=$row_kategori->menu_baslik;
$kategori_list[$i][‘menu_altid’]=$row_kategori->menu_altid;
$i++;
}
echo SinirsizKategoriListele($kategori_list);
?>
[/php]