Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Rekurzivne funkcije - niz kao povratna vrednost

[es] :: PHP :: Rekurzivne funkcije - niz kao povratna vrednost

[ Pregleda: 1734 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.dialup.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Rekurzivne funkcije - niz kao povratna vrednost25.06.2009. u 09:00 - pre 180 meseci
Imam sledeću situaciju. U projektu na kojem radim postoji tabela 'meni' koja sadrži sledeće stavke: id, naziv, targeturl, parentid. Ako je stavka top level meni onda za parentid ima NULL. Na jednom mestu vadim ceo tree kao što funkciji getTree($parId) prosleđujem id top level menija čije stablo hoću da dobijem.
Funkcija getTree vraća izlaz sledećeg formata:
Code:

podmeni 1
---- 3rd level meni 1/1
---- 3rd level meni 1/2
---- 3rd level meni 1/3
---- 3rd level meni 1/4
podmeni 2
---- 3rd level meni 2/1
---- 3rd level meni 2/2
---- 3rd level meni 2/3
---- 3rd level meni 2/4
podmeni 3
podmeni 4
---- 3rd level meni 4/1
---- 3rd level meni 4/2
---- 3rd level meni 4/3
---- 3rd level meni 4/4


Problem je u tome što ne znam kako da izvedem da funkcija getTree ne ispisuje rezultat direktno(pošto se nalazi u modelu), već da mi vrati kao rezultat niz ili šta bi već bilo zgodno za skladištenje ove hierarhije.

Code:

public function getSubMenu($parId)
{
         $dbAdapter = Zend_Registry::getInstance()->dbAdapter;
         $query = "SELECT * FROM `menu` WHERE parent = $parId";
         $res = $dbAdapter->query($query);
         $rows = $res->fetchAll();
         return $rows;
}
    
public function getTree($parId)
{
        $rows = $this->getSubMenu($parId);

        foreach($rows as $row)
        {
            if($row['level1'] == 0 && $row['level2'] == 0)
            {
                echo "      ";
            }
            printf("<a href='%s'>%s</a><br />", $row['url'], $row['naziv']);
            $this->getTree($row['id']);
        }
}


Tabela meni sadrži još i parametre level1 i level2. Ako je level1 = 1 i level2 = 0 meni je top level, ako je level1 = 0 i level2 = 1 u pitanju je podmeni, a ako su oba 0 onda radi se o trećem nivou.
P.S. Ne pitajte me ništa nisam ja projektovao bazu.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: Rekurzivne funkcije - niz kao povratna vrednost25.06.2009. u 09:26 - pre 180 meseci
Nikad ne trebaš u modelu da radiš ispis... Ti bi tu logiku iz f-je getTree() trebao da prebaciš u view script, ili još bolje, u neki view helper.

Al' ako baš treba da ceo taj ispis "spakuješ" u neki niz, onda bi morao tu povratnu vrednost da upisuješ u nekog člana te klase, pošto u toj f-je radiš rekurziju, pa bi se stalno taj neki niz reset-ovao, ako bi ga deklarisao unutar f-je. I to bi onda izgledalo ovako nekako:
Code:

protected $tree = array();

//ostatak koda

public function getTree($parId)
{
        $rows = $this->getSubMenu($parId);

        $output = '';
        foreach($rows as $row)
        {
            if($row['level1'] == 0 && $row['level2'] == 0)
            {
                $output .= "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            }
            $output .= '<a href="' . $row['url'] . '">' . $row['naziv'] . '</a><br />';

            $this->tree[] = $output;

            $this->getTree($row['id']);
        }

       return $this->tree;
}

Al' opet kažem, mnogo je pametnije da to ide u ViewHelper...

I da, stvarno je glupo organizovana ta tabela, i taj ispis menija nikad ne bi trebao da se radi na taj način, sa rekurzijom...
 
Odgovor na temu

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.dialup.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Re: Rekurzivne funkcije - niz kao povratna vrednost25.06.2009. u 09:37 - pre 180 meseci
Citat:
Nikola Poša: Nikad ne trebaš u modelu da radiš ispis...

Znam da se u modelima ne radi ispis, zato sam i trazio resenje.

Citat:
Nikola Poša: Al' opet kažem, mnogo je pametnije da to ide u ViewHelper...

Hvala! Pogledacu uputstvo za ViewHelper.

Citat:
Nikola PošaI da, stvarno je glupo organizovana ta tabela...

Znam, nisam je ja radio...
 
Odgovor na temu

[es] :: PHP :: Rekurzivne funkcije - niz kao povratna vrednost

[ Pregleda: 1734 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.