Estoy tratando de hacer un menu php a partir de una base de datos donde no haya límite de subsecciones, es por eso que me basé en este código
http://www.finalwebsites.com/tutorials/dynamic-navigation-list.php
le hice muy pequeñas modificaciones muy por encima, pero aún así no pasa del 2do nivel, me devuelve todos los items con parent id = 0, después las subsecciones hijas de 0, pero no más allá
En lugar de devolverme 0.1.1.1, se estanca en 0.1.1
alguien tiene idea de por qué?
Código PHP :
<?php include ("mysqlconn.php"); $sql = "SELECT id, label, parent FROM secciones ORDER BY parent, id ASC"; $items = mysql_query($sql); while ($obj = mysql_fetch_object($items)) { if ($obj->parent == 0) { $parent_menu[$obj->id]['label'] = $obj->label; $parent_menu[$obj->id]['link'] = $obj->id; } else { $sub_menu[$obj->id]['parent'] = $obj->parent; $sub_menu[$obj->id]['label'] = $obj->label; $sub_menu[$obj->id]['link'] = $obj->id; $parent_menu[$obj->parent]['count']++; } } mysql_free_result($items); function menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") { $menu = "<ul id=\"".$main_id."\">\n"; foreach ($parent_array as $pkey => $pval) { if (!empty($pval['count'])) { $menu .= " <li><a class=\"".$extra_style."\" href=\""."?"."id=".$pval['link']."&".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n"; } else { $menu .= " <li><a class=\"".$extra_style."\" href=\""."?"."id=".$pval['link']."\">".$pval['label']."</a></li>\n"; } if (!empty($_REQUEST[$qs_val])) { $menu .= "<ul id=\"".$sub_id."\">\n"; foreach ($sub_array as $sval) { if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) { $menu .= "<li><a href=\""."?id=".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n"; } } $menu .= "</ul>\n"; } } $menu .= "</ul>\n"; return $menu; } function rebuild_link($link, $parent_var, $parent_val) { $link_parts = explode("?", $link); $base_var = "&".$parent_var."=".$parent_val; if (!empty($link_parts[1])) { $link_parts[1] = str_replace("&", "##", $link_parts[1]); $parts = explode("##", $link_parts[1]); $newParts = array(); foreach ($parts as $val) { $val_parts = explode("=", $val); if ($val_parts[0] != $parent_var) { array_push($newParts, $val); } } if (count($newParts) != 0) { $qs = "&".implode("&", $newParts); } return $link_parts[0].$base_var.$qs; } else { return $link_parts[0].$base_var; } } echo menu($parent_menu, $sub_menu, "menu", "nav", "subnav"); ?>
Explico mejor:
Hasta el 2do nivel (1.1) el menú se despliega correctamente, pero a partir del 3ro (1.1.1) ya directamente ni se despliega, aparece un <li> en blanco entre los items con parent = 0 por cada sección de 3er nivel, en lugar de posicionarse dentro de una <ul> dentro de su correspondiente padre de nivel 2, es decir, primer nivel de subsecciones.
¿Alguna manera de solucionarlo?
Más detalles
Mi tabla es así
Mi Tabla escribió:
label -> varchar (25)
parent -> int
content -> varchar (200)