Witam, tworze kod który ma pobierać kategorie z bazy danych i budować drzewo.
Pierwsza główna kategoria i jej podkategorie ładuje i wyświetla się prawidłowo,
ale następne główne kategorie wraz z potomkami nie.

Wygląda to jakby dane były nadpisywane tu:
  1. <?php
  2. $this->c_parentcats[$i] = new cats_tree($rek['id'], $rek['name'], $rek['level'], $deep+1);
  3. ?>


Baza wygląda tak:

id | name | parent_id | level

Proszę o pomoc, bo już sam nie mogę dojść co jest źle.
[EDIT: Błąd był w klasie obsługującej zapytania do bazy, zostawiam kod może sie komuś przyda]

  1. <?php
  2. function show_cats_tree($start = 0, $level = 1)
  3. {
  4. // konstrkucja drzewa kategorii
  5. // cat id, cat name, level, glebokosc
  6. $tree = new cats_tree($start, '', $level, -1);
  7.  
  8. //wyswietlanie drzewa
  9. $tree->show();
  10. }
  11. ?>

  1. <?php
  2. // klasa cats_tree - odpowiada za budowanie drzewa
  3. class cats_tree
  4. {
  5. // zmienne skladowe
  6. public $c_cat_id;
  7. public $c_title;
  8. public $c_level;
  9. public $c_deep;
  10. public $c_parentcats;
  11.  
  12. public function __construct($cat_id, $name, $level, $deep)
  13. {
  14. // ustalanie wartosc dla zmiennych
  15. $this->c_cat_id = $cat_id;
  16. $this->c_name = $name;
  17. $this->c_level = $level;
  18. $this->c_deep = $deep;
  19. $this->c_parentcats = array();
  20.  
  21. global $db;
  22.  
  23. // ważne jesli cat posiada potomkow, inaczej nie pobiera danych
  24. if($level=='1' || $level=='2')
  25. {
  26. $sql=$db -> query("SELECT * FROM cats WHERE parent_id='".intval($cat_id)."' ORDER BY name");
  27. // for( $i = 0; $rek = $db -> fetch_row(); $i++ )
  28. // zrobilem z while bo jest szybsze
  29. $i=0;
  30. while($rek = $db -> fetch_row($sql))
  31. {
  32. $this->c_parentcats[$i] = new cats_tree($rek['id'], $rek['name'], $rek['level'], $deep+1);
  33. $i++;
  34. }
  35. }
  36. }
  37.  
  38. public function show()
  39. {
  40. // jesli nie jest to wezel glowny(zerowy) to wyswietla kategorie
  41. if($this->c_deep > '-1')
  42. {
  43. for( $i = 0; $i < $this->c_deep; $i++ )
  44. {
  45. echo '_';
  46. }
  47.  
  48. echo 'id: '.$this->c_cat_id.', name: '.$this->c_name.'<br />';
  49. }
  50.  
  51. $subcats = count($this->c_parentcats);
  52.  
  53. for( $i = 0; $i < $subcats; $i++ )
  54. {
  55. // wyswietlanie podkategorii
  56. $rzad = $this->c_parentcats[$i]->show();
  57. }
  58. }
  59. }
  60. ?>