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:
<?php
$this->c_parentcats[$i] = new cats_tree($rek['id'], $rek['name'], $rek['level'], $deep+1);
?>
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]<?php
function show_cats_tree($start = 0, $level = 1)
{
// konstrkucja drzewa kategorii
// cat id, cat name, level, glebokosc
$tree = new cats_tree($start, '', $level, -1);
//wyswietlanie drzewa
$tree->show();
}
?>
<?php
// klasa cats_tree - odpowiada za budowanie drzewa
class cats_tree
{
// zmienne skladowe
public $c_cat_id;
public $c_title;
public $c_level;
public $c_deep;
public $c_parentcats;
public function __construct($cat_id, $name, $level, $deep)
{
// ustalanie wartosc dla zmiennych
$this->c_cat_id = $cat_id;
$this->c_name = $name;
$this->c_level = $level;
$this->c_deep = $deep;
$this->c_parentcats = array();
// ważne jesli cat posiada potomkow, inaczej nie pobiera danych
if($level=='1' || $level=='2')
{
$sql=$db -> query
("SELECT * FROM cats WHERE parent_id='".intval($cat_id)."' ORDER BY name"); // for( $i = 0; $rek = $db -> fetch_row(); $i++ )
// zrobilem z while bo jest szybsze
$i=0;
while($rek = $db -> fetch_row($sql))
{
$this->c_parentcats[$i] = new cats_tree($rek['id'], $rek['name'], $rek['level'], $deep+1);
$i++;
}
}
}
public function show()
{
// jesli nie jest to wezel glowny(zerowy) to wyswietla kategorie
if($this->c_deep > '-1')
{
for( $i = 0; $i < $this->c_deep; $i++ )
{
}
echo 'id: '.$this->c_cat_id.', name: '.$this->c_name.'<br />'; }
$subcats = count($this->c_parentcats);
for( $i = 0; $i < $subcats; $i++ )
{
// wyswietlanie podkategorii
$rzad = $this->c_parentcats[$i]->show();
}
}
}
?>
Ten post edytował armata12 14.09.2007, 20:32:00