[ dee_ @ 01.12.2005. 16:42 ] @
imam u bazi ovako nesto:


kat_id | parent_id | opis

1 0 prva
2 0 druga
3 0 treca
4 1 prva1
5 1 prva2
6 2 druga1
7 2 druga2
8 2 druga3
.
.
.
30 7 druga2 I
31 7 druga2 II
32 7 druga2 III
.
.
.

valjda ce bit jasno otprilike sta mislim :)

zanima me, ima li kakva zgodna rekurzija koja ce proc kroz sve ovo i ispisat 'drvo kategorija'? znaci, krene od ovih kojima je parent=0, pa svaku razgranat do besvijesti? ako nekome pada nesto na pamet... kako to najjednostavnije da izvedem?
[ _owl_ @ 01.12.2005. 22:37 ] @
I sta tebi tacno nije jasno??
[ dee_ @ 02.12.2005. 15:20 ] @
dobar si :)

nije mi bilo jasno kako bi rekurzivno proso kroz ovakvo stablo (cija je dubina proizvoljna) i ispisao ga u obliku:

kategorija1
--podkategorija11
--podkategorija12
-----podkategorija 121
-----podkategorija 122
-----podkategorija 123
--podkategorija 13
kategorija 2
.
.
.

zapleo sam se jer je dubina proizvoljna, al nakon cijele noci probavanja i nekoliko restarta zbog beskonacnih petlji, rijesio sam : )


[ dado_k @ 02.12.2005. 19:01 ] @
pa onda postuj riješenje baš me zanima na koju foru si radio!
[ dee_ @ 02.12.2005. 21:09 ] @
evo ga :)

vjerojatno ima nesto i za odbacit...kad sam vidio da radi ostavio sam nek odstoji...sutra cu vidjet ide li sta pametnije : )

ne znam kolko je elegantno, vjerojatno ide i puno jednostavnije, al mi je bilo dovoljno da je - proradilo : )


Code:

function glavna()
{
    global $main;
    
    if (isset($_GET['kategorija'])) $kat=$_GET['kategorija'];
        else $kat = NULL;
        
    katalog($kat);
    
    $main->smarty->display("katalog.tpl");

}

function katalog($kat)
{
    global $main;
    $main->baza->Otvori();

    if ($kat)    
    {
        DajElement($kat);
    }

    else
    {
        $query1 = "SELECT id, title FROM katalog_categories 
        WHERE active=1 AND parent = 0 ";
    
        $r=mysql_query($query1) or die (mysql_error());

        while($row = mysql_fetch_assoc($r)) 
        {
                DajElement($row['id']);
    
        }
    
    }
    

    $main->baza->Zatvori();

}

function DajElement($kat)
{
    global $main;
    global $sadrzaj;
        
    $query = "SELECT id, title FROM katalog_categories 
            WHERE active=1 AND id = $kat ";

    $r=mysql_query($query) or die (mysql_error());
    $row = mysql_fetch_assoc($r);
    $sadrzaj .= "<DIV class=glavne_kategorije><a href=\"$_SERVER[PHP_SELF]?kategorija=$row[id]\">$row[title]</a> <br>";

    Drvo($kat,$row['title']);
    
    $sadrzaj .= "</DIV>";
    
    $main->smarty->assign("sadrzaj",$sadrzaj);
}

function Drvo($kat,$ime)
{
    global $sadrzaj;
$query = "SELECT id, title FROM katalog_categories 
            WHERE active=1 AND parent = $kat ";

    $r=mysql_query($query) or die (mysql_error());
    $kolko = mysql_num_rows($r);
    
    if ($kolko > 0) $sadrzaj .="<DIV class=podkategorije>";
    
        while($row = mysql_fetch_assoc($r)) 
        {
        
        $sadrzaj .= "<a href=\"$_SERVER[PHP_SELF]?kategorija=$row[id]\">$row[title]</a> <br>";
        $vrati = ($kolko==0) ? 0 : Drvo($row['id'],$row['title']);
        }
    if ($kolko > 0) $sadrzaj .="</DIV>";
        
        return $vrati;        

}


jedino sta ne znam je kako u smartyju to ispisat kroz sections... nisam ulovio nacin kako bi to mogo... pa sam ovako, strpo sve u jednu varijablu 'sadrzaj' i nju poslo smartyiju.. dok ne smislim nesto more smart :)