napisałem taki speudo kod ktory sluzy do twozenia struktury kategorii.
<? class menu { protected $menu = null; protected function level1($id, $ss) { $zap = "select * from menu WHERE pid=$id ORDER BY p ASC"; $sth = $dbh->prepare($zap); $sth->execute(); $dane = $sth->fetchAll(); $ss = ($ss == 1) ? ' id="qm0" class="qmmc" style="width: 600px; float: left;"' : ''; $menu = '<ul'.$ss.'>'."\n"; foreach($dane as $k => $e) { $menu .="<li>\n"; if($this->ile($e['id']) > 0) { $menu .= $this->generujlink($e['link'],$e['tytul'.$sys_lang],1,$e['blank'],$this->ile($e['id']),$e['id']); $menu .= $this->parentel($e['id']); } else { $menu .= $this->generujlink($e['link'],$e['tytul'.$sys_lang],0,$e['blank']); } $menu .= '</li>'."\n"; if($ss == 1) { $menu .='<li><span class="qmdivider qmdividery"></span></li>'."\n"; } } $menu.="</ul>\n"; $this->menu = $menu; } protected function parentel($id) { $zap = "select * from menu WHERE pid={$id} ORDER BY p ASC"; $sth = $dbh->prepare($zap); $sth->execute(); $dane = $sth->fetchAll(); $menu2 = "<ul>\n"; foreach($dane as $k => $e) { $menu2 .="<li>\n"; if($this->ile($e['id']) > 0) { $menu2 .= $this->generujlink($e['link'],$e['tytul'.$sys_lang],1,$e['blank'],$this->ile($e['id']),$e['id']); $menu2 .= $this->parentel($e['id']); } else { $menu2 .= $this->generujlink($e['link'],$e['tytul'.$sys_lang],0,$e['blank']); } $menu2 .= "</li>\n"; } $menu2.="</ul>\n"; return $menu2; } public function ile($id) { $zap = "SELECT COUNT(*) from menu WHERE pid={$id}"; $sth = $dbh->prepare($zap); $sth->execute(); $baza = $sth->fetch(); return $baza[0]; } protected function generujlink($link, $tytul, $e = 0, $t = 0, $ile = 0, $id = 0) { $link = $sf.'?kt='.$kt[1]; } if($ile > 0) { $link = $sf.'?kt=menu&id='.$id; } else { $link = '#'; } } $e = ($e == 1) ? 'class="qmparent" ' : ''; $t = ($t == 1) ? ' target="_blank"' : ''; $link = '<a '.$e.'href="'.$link.'"'.$t.'>'.$tytul.'</a>'; return $link; } public function __construct($id = 0, $ss = 1) { $this->level1($id, $ss); } public function getmenu() { return $this->menu; } } ?>
moje pytanie jest nastepujace. czy idzie to jakos zoptymalizowac? chodzi o ilosc zapytan do bazy...