[ Marko Medojević @ 25.06.2009. 09:00 ] @
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. |