Witam.
Mam o to toki kodzik ktroy generuje mi drzewko - tzn pobiera jednym zapytaniem wszystkie kategorie, nastepnie odpowiednio sortuje to drzewko.
Nastepnie do kolejnego poziomu kategorii (gdzie PARENT_Id nie jest zero - dodaje odstepy.
Niestety tych odstepow nie dodaje juz do jeszcze kolejnego poziomu.
Czyli wyglada to tak:
Przyklad
Kategoria 1
Kategoria 1.1
Kategoria 1.2
Kategoria 1.2.1 - i wlasnie tutaj powinno dodac kolejne wciecie a tego nie robi.
Bardzo prosze o pomoc w rozwiazaniu tego problemu.
Ja myslelm nad wprowdzeniem dodatkowego POLA w tablicy ktroa generuje ten skrypt o naziwe LEVEL.
I tak dla Przykladu ktroy podalem wyzej dla kazdej z tych kategorii zmienna LEVEL wygladala by tak:
Kategoria 1 - LEVEL=0
Kategoria 1.1 - LEVEL=1
Kategoria 1.2 - LEVEL=1
Kategoria 1.2.1 - LEVEL=2
itd.
<?
$resdddd = $db->get_results("SELECT ID,PARENT_ID,TITLE,CACHE_URL FROM ".CAT." ORDER BY PARENT_ID, TITLE ",ARRAY_A);
// Kolejne wezly drzewa.
$level = 0;
foreach( $resdddd as $row ){
// Przepisujemy z SQL'a
$level = $level + 1;
$row['ID'] = (int) $row['ID'];
$row['PARENT_ID'] = (int) $row['PARENT_ID'];
$tree[$row['ID']] = $row;
// Tablica potomkow wezla
$tree[$row['CID']]['children'] = array(); // Sciezka
if ((int) $row['PARENT_ID'])
{
$tree[$row['ID']]['path'] = ' '.$row['TITLE'].'';
}
else
{
$tree[$row['ID']]['path'] = $row['TITLE'];
}
// Dodajemy wskaznik do wezla do tablicy potomkow jego rodzica (czyli do tablicy braci)
$tree[$row['PARENT_ID']]['children'][] =& $tree[$row['ID']];
}
// Ustalamy nowa kolejnosc.
function setOrderRecursive2(&$tree, &$orderredTree, &$node)
{
// Wglebiamy sie.
for ($i = 0
, $n = count($node['children']); $i < $n; $i++) {
// Dodajemy biezacy wezel do tablicy kolejnosci.
$orderredTree[] =& $node['children'][$i];
// Przechodzimy poddrzewo.
setOrderRecursive2($tree, $orderredTree, $node['children'][$i]);
}
}
// Wywolujemy
setOrderRecursive2
($tree, $orderredTree = array(), $tree[0
]);
$smarty->assign("se",$orderredTree);
$szablon ='cats_tree.tpl';
?>
Z gory dzieki za pomoc.
PS. Oczywiscie jak juz bede mial w tablicy $orderredTree dodatkowa zmienna LEVEL - to wtedy juz w szablonie SMARTY odpowiednio zrobie sobie wciecia za pomoca np.
<td class="tree_{$se.LEVEL}">{$se.TITLE}</td>[/code]