![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio zastanawialem sie nad optymalnem rozwiazaniem dla wyswietlania drzewka. Mam w bazie tabele z grupami ktora poziada kolumne parent_id. Dzieki temu moge dowolnie zagniezdzac gurpy jedne w drugich (najwyzej stoja te z parent_id = 0) .
Teraz pobieram sobie to wszystko z bazy i zastanawiam sie w jaki sposob zformatowac tablice z wynikami aby smarty bez problemu (czytaj duzej ilosci kodu) mi ja wyswielil. Do tej pory mialem cos takiego Kod grupa nadrzedna |
| -dzieci | | -dziecko 1 | | | | - dzieci... | -dziecko 2 | | - dzieci... No ale taka tablica jest dosyc niewygoda w uzyciu. Chcialem ja miec bardziej plaska. Myslalem nad tym zeby wstawiac ilosc dzieci i tworzyc cos w rodzaju stosu. Nadzedna -> 4 dzieci -> umiesc na stosie 4 -> dziecko -> ilosc swoich dzieci 2 -> umiesc na stosie 2 ->wyswietlone dwoje dzieci -> zdejmi ze stosu 2 -> dekrementuj zmienna najwyzej na stosie i lec dalej. Ale jak pewnie zauwazlyliscie to jest niezle kombinactwo ![]() ![]() -------------------- "Real children don't go hoppity-skip unless they are on drugs."
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 4.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
w mojej bazie jest tak.. id_kat|nazwa_kat|ojc_kat|
teraz po wczytaniu tabeli do tablicy robie tak. [php:1:01eb150073]<?php function petelka($ojciec='0'){ global $drzewo, $synowie, $glebokosc; $glebokosc++; foreach ($synowie[$ojciec] as $key => $syn) { $nowy_ojciec=$syn; $drzewo[]=array($syn, $glebokosc); if(!empty($synowie[$nowy_ojciec])){ $this->petelka($nowy_ojciec); $glebokosc--; } } } function rekurencja(){ global $synowie, $drzewo, $glebokosc; $synowie=''; $drzewo=''; $glebokosc=''; $all = new all("dbconnect"); $all->dbconnect(); $katalogi = $all->db->getAssoc('SELECT id_kat, ojc_kat, nazwa_kat FROM kat ORDER BY ojc_kat, poz_kat'); foreach ($katalogi as $id_kat => $ojciec) { $ojcowie[0]=''; if(!in_array($ojciec[0], $ojcowie)){ $g=0; $ojcowie[$i]=$ojciec[0]; $i++; } $synowie[$ojciec[0]][]=$id_kat; } $this->petelka(); $roottree=array('0', '0'); array_unshift($drzewo, $roottree); $katalogi['0']=array('null', 'Kategorie'); foreach($drzewo as $id){ $naz_drzewo[]=str_repeat("  ",$id[1]).$katalogi[$id[0]][1]; } $this->drzewo=$drzewo; $this->naz_drzewo=$naz_drzewo; } ?>[/php:1:01eb150073] to jest przyklad typowej rekurencji ...bez ograniczen na glebokosc |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 13:45 |