Всем доброго времени суток!
По порядку опишу все структуры, потом задам вопрос.
Есть база данных. Соответственно есть id, parent_id и name. Есть и другие поля, но они не значимы для вопроса. Есть функция PHP которая выводит дерево из mysql:
| Код | function ShowTree($pid=0) { $tree = array(); $ret = ""; global $db; $query = 'SELECT * FROM goods where level in (1, 2)'; $db->query($query); while ($row = $db->parse_query('array')) { $tree[$row['rodit_kod']][$row['elem_id']] = $row['name']; }
foreach($tree as $id=>$root) { if($pid!=$id)continue; if(count($root)) { foreach($root as $key => $title) { if ($pid != "0") { if (isset($_GET['id']) && ($_GET['id'] == $key)) { $class = ' underlined'; } else { $class = ''; } /* выводятся второстепенные пункты меню (потомки) */ $ret .= "<li><span class=\"submenu".$class."\"><a href=\"test.php?id=".$key."\">".$title."</a></span>"; //$ret .="</div>"; } else { /* выводятся главные пункты меню */ $ret .= "<li class=\"main_menu_on\"><span class=\"clr\"><a href=\"#\" onClick=\"test_alert(".$key."); return false;\">".$title."</a></span></li>"; $ret .= "<div>"; } if(count($tree[$key])) { $ret .= ShowTree($key); } } } } return $ret;
}
|
На выходе получается вот такой HTML код: (сорри за неформатированность, это прямо из исходного кода взято)
| Код | <ul id="right_menu"> <li class="main_menu_on"> <span class="clr"> <a href="#" onClick="test_alert(90); return false;">DVD</a> </span> </li> <div> <li> <span class="submenu"> <a href="test.php?id=99347248">*Music</a></span> <li> <span class="submenu"> <a href="test.php?id=99347319">*RUS</a> </span> <li> <span class="submenu"> <a href="test.php?id=99347320">*Зарубежные</a> </span> <li> <span class="submenu"> <a href="test.php?id=99347247">*Индия</a> </span> <li> <span class="submenu"> <a href="test.php?id=99347341">*Мультфильмы</a> </span> <li> <span class="submenu"> <a href="test.php?id=99347235">*Раскраски</a> </span> <li> <span class="submenu"> <a href="test.php?id=99344734">*Распродажа</a> </span> <li> <span class="submenu"> <a href="test.php?id=99347317">*ТВ</a></span> <li> <span class="submenu"> <a href="test.php?id=99347240">*Эротика</a> </span> <li class="main_menu_on"> <span class="clr"><a href="#" onClick="test_alert(91); return false;">FUN Plastic</a></span> </li> <div> <li> <span class="submenu"><a href="test.php?id=222222">test2011</a></span> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(7239); return false;">MP3</a></span></li> <div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(3830); return false;">Игры</a></span></li><div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(92); return false;">Игры</a></span></li><div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(93); return false;">Прочие</a></span></li><div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(94); return false;">Раскраски</a></span></li><div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(95); return false;">Фигурки</a></span></li><div> <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(96); return false;">Чистый склад</a></span></li><div>
</ul>
|
А теперь суть. Всё что начинается со звёздочки есть пункт подкатегории. Всё остальное - категории. Сами подкатегории нужно показывать/скрывать в зависимости от их текущего состояния (своеобразный toggle). Может есть ещё способы, но я не нашёл другого, кроме как обернуть блок подкатегорий в div. Возникла проблема, поскольку функция рекурсивная и div работает совершенно не так, как мне нужно. Пробовал задавать какие-то математические условия, но пока точно не могу сообразить, что конкретно нужно написать.
Если есть какой-то другой способ реализовать нужный мне функционал, буду рад услышать любую помощь и объяснения по этому вопросу. Если нет - как сделать то, что уже имеется, т.е. обернуть блок подкатегорий в div?
Да, кстати. Если подкатегорий не будет (а такое есть в моём примере) то должен быть просто пустой div.
Всем заранее спасибо за помощь  |