Вот начел делать меню по собственний софтовик, столкнулса с проблемой подкатегорий.... суть такая, с поля menu витягиваю категории, с menu_sub подкатегории, подскажите в чом я зделал ошибку? PHP: <?php $data = mysql_query ("SELECT * FROM menu",$con); $gg = mysql_fetch_assoc ($data); $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$gg['keys']."'",$con); print ' <div id="container"> <ul id="nav">'; while ($res = mysql_fetch_assoc ($data)){ print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>'; while ($ress = mysql_fetch_assoc ($dataa)){ print '<ul><li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li></ul>';} print '</li>';} print '</ul></div>' ?> вот таблички Код (Text): MENU: id|name|href|keys| 1|index|#|| 2|main|main.php|index| MENU_SUB: ids|name_sub|link|key| 1|first|#|index|
Код (Text): MENU: id|name|href|keys| 1|index|#|| 2|main|main.php|index| MENU_SUB: ids|name_sub|link|key| 1|first|#|index| [/quote] Не выкладывай так...непонятно нефига уже на 4х столбиках. Ошибка первоначально в логике. Как должно работать в теории: 1.Делаем выборку по категориям. 2.Пока есть категории начинаем их выводить. 3.После вывода каждой категории, делаем выборку подкатегорий для текущей категории. 4.Выводим все подкатегории.
PHP: $Cat = new Category; while ($cat==getNextCategory()) { $Cat->renderCurentCategory($catTemplate); $Cat->renderAllSubCategory($subCatTemplate); } Таже логика...только в коде, в коде который не будет работать без описания класса)
PHP: <?php $data = mysql_query ("SELECT * FROM menu",$con); print ' <div id="container"> <ul id="nav">'; while ($res = mysql_fetch_assoc ($data)) { print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>'; $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$res['keys']."'",$con); while ($ress = mysql_fetch_assoc ($dataa)) { print '<ul><li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li></ul>'; } print '</li>'; } print '</ul></div>' ?> Поидее так должно заработотать.
фактически верно, но оно виводит только 1 запись...тобто если есть 2 субкатегории оно виводит 1, у меня в ходе експерементов так же делало( наверное цикл прокручивает только 1 раз потому што он в прокручиваетса в цикле, ет мое мнение как би ето зделать
всьотаки нашеб багу в html )) HTML: <?php require_once "core.php"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <title>Выпадающее меню CSS</title> <link rel="stylesheet" href="/css/examples.css" type="text/css" /> <style type="text/css"> #nav, #nav ul { list-style: none; margin: 0; padding: 0; border: 1px solid #000; background: #515151; float: left; width: 100%; } #nav li { float: left; position: relative; background: #515151; back\ground: none; } #nav a { color: #fff; text-decoration: none; display: block; width: 120px; padding: 4px 10px; background: url(dot.png) repeat-y right; } #nav a:hover { color: #000; background: #ccc; } #nav li:hover, #nav li.jshover { background: #333; } #nav li ul { display: none; position: absolute; background: url(fone-tr.png); padding: 8px 0; width: 138px; } #nav li li a { width: 118px; background: none; } #nav li:hover ul, #nav li.jshover ul { display: block; } #nav li:hover li ul, #nav li.jshover li ul { display: none; width: 138px; top: -9px; left: 118px; lef\t: 133px; } #nav li:hover li:hover ul, #nav li.jshover li.jshover ul { display: block; } </style> <script type="text/javascript"><!--//--><![CDATA[//><!-- jsHover = function() { var hEls = document.getElementById("nav").getElementsByTagName("LI"); for (var i=0, len=hEls.length; i<len; i++) { hEls[i].onmouseover=function() { this.className+=" jshover"; } hEls[i].onmouseout=function() { this.className=this.className.replace(" jshover", ""); } } } if (window.attachEvent && navigator.userAgent.indexOf("Opera")==-1) window.attachEvent("onload", jsHover); //--><!]]></script> </head> <body> <?php $data = mysql_query ("SELECT * FROM menu",$con); print ' <div id="container"> <ul id="nav">'; while ($res = mysql_fetch_assoc ($data)) { print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>'; $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$res['keys']."'",$con); print '<ul>'; while ($ress = mysql_fetch_assoc ($dataa)) { print '<li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li>';} print '</ul></li>';} print '</ul></div>' ?> </ul> </div> </body> </html>
Дамп базы для меню и подменю PHP: CREATE TABLE IF NOT EXISTS `cats` ( `id` int(11) NOT NULL auto_increment, `name` varchar(32) character set cp1251 collate cp1251_bin NOT NULL default '', `href` varchar(128) character set cp1251 collate cp1251_bin NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; -- -- Dumping data for table `cats` -- INSERT INTO `cats` (`id`, `name`, `href`) VALUES (1, 'Основное', '/main'), (2, 'Дополнительное', '/aditional'), (3, 'Не важное', '/others'); -- -------------------------------------------------------- -- -- Table structure for table `sub_cats` -- CREATE TABLE IF NOT EXISTS `sub_cats` ( `CatId` int(11) NOT NULL default '0', `Name` varchar(32) character set cp1251 collate cp1251_bin NOT NULL default '', `href` varchar(128) character set cp1251 collate cp1251_bin NOT NULL default '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `sub_cats` -- INSERT INTO `sub_cats` (`CatId`, `Name`, `href`) VALUES (1, 'первая в главном', '/main/one'), (1, 'Вторая в главном', '/main/two'), (1, 'Третья в главном', '/main/three'), (2, 'первое в дополнительном', '/aditional/first'), (2, 'Второе вдополнительном', '/aditional/second'); PHP: Рабочий код. <?php mysql_connect('localhost','root','123'); mysql_select_db('abat'); mysql_query("SET NAMES 'cp1251'"); $data = mysql_query ("SELECT * FROM cats"); echo mysql_error(); print ' <div id="container"> <ul id="nav">'; while ($res = mysql_fetch_assoc ($data)) { print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>'; $dataa = mysql_query ("SELECT * FROM sub_cats WHERE `CatId` = '".$res['id']."'"); while ($ress = mysql_fetch_assoc ($dataa)) { print '<ul><li><a href="'.$ress['href'].'">'.$ress['Name'].'</a></li></ul>'; } print '</li>'; } print '</ul></div>' ?>