Witam mam taki problem, zabralem sie za robienie menu kategorii sklepu, a jak wiadomo kategorie moga sie zagłębiać chodzi mi żeby móc osiągnąć np.taką strukturę:

kategoria1
>>kategoria3
>>kategoria5
kategoria2
kategoria4
>>kategoria6
kategoria7

Napisalem sobie taki kod, nie jest to oczywiscie jakis profesjonalny kod gdyz jestem poczatkujacy.


  1. <?php
  2. require_once '../baza/polaczenie.inc.php';
  3.  
  4. function kategoria_has_child($katid){
  5. global $conn;
  6. $sql="SELECT * FROM kategoria WHERE KAT_PARENT=$katid";
  7. $result=$conn->query($sql);
  8. if($userdata=$result->fetchRow(DB_FETCHMODE_ASSOC)){
  9.  return true; }
  10. else return false; 
  11. }
  12.  
  13. function kategoria_jest_child($katid){
  14. global $conn;
  15. $sql="SELECT * FROM kategoria WHERE KAT_ID=$katid AND KAT_PARENT!=0";
  16. $result=$conn->query($sql);
  17. if($userdata=$result->fetchRow(DB_FETCHMODE_ASSOC)){
  18.  return true; }
  19. else return false; 
  20. }
  21.  
  22.  
  23.  function pokaz_childa($katid){
  24. global $conn;
  25. $sql="SELECT * FROM kategoria WHERE KAT_PARENT=$katid";
  26. $result=$conn->query($sql);
  27. if($userdata=$result->fetchRow(DB_FETCHMODE_ASSOC)){
  28.  echo " >> ".$userdata['KAT_Nazwa']."<br/>"; return $userdata['KAT_ID'];
  29. }else return false;
  30. }
  31.  
  32.  
  33.  
  34.  
  35. function buduj_liste_kategorii(){
  36. global $conn;
  37.  
  38. $sql="SELECT * FROM kategoria";
  39. $result=$conn->query($sql);
  40. while($userdata=$result->fetchRow(DB_FETCHMODE_ASSOC)){
  41. if(kategoria_has_child($userdata['KAT_ID'])&&!kategoria_jest_child($userdata['KAT_ID'])){
  42. echo $userdata['KAT_Nazwa']."<br/>";
  43.  
  44. pokaz_childa(pokaz_childa($userdata['KAT_ID']));
  45. }
  46. if(!kategoria_has_child($userdata['KAT_ID'])&&!kategoria_jest_child($userdata['KAT_ID'])){
  47.  echo $userdata['KAT_Nazwa']."<br/>";
  48.  
  49. }}
  50. }
  51. buduj_liste_kategorii();
  52. ?>





struktura tabeli kategorie wyglada nastepujaco

kategoria
KAT_ID - klucz glowny, identyfikator kategorii
KAT_Nazwa - nazwa kategori (przykladowo kategoria1,kategoria2...kategoriaN)
KAT_PARENT - jezeli jest rozny od 0 , to znaczy ze kategoria jest rodzicem innej kategorii
KAT_Opis - opis kategorii

wszystko teraz niby działa, ale problem tkwi w tym miejscu pokaz_childa(pokaz_childa($userdata['KAT_ID'])); - to jest troche bez sensu, bo dziala tylko do 2 poziomu zaglebienia czyli np kategoria 3 jest dzieckiem kategorii1 a kategoria5 jest dzieckiem kategorii 3, gdy dodam dziecko kategorii 5 to juz to rozwiazanie nie daje efektu
nie wiem, moze mozna to zrobic jakos rekurencja, ja narazie nie mam pomyslu, moze ktos obeznany moglby pomoc jakos, w podgladzie bbcode chyba nie pokolorowal tego kodu jak to mialo by byc, nie wiem dlaczego
pzdr