Ver Mensaje Individual
  #6 (permalink)  
Antiguo 29/07/2011, 17:16
Avatar de Martriay
Martriay
 
Fecha de Ingreso: noviembre-2010
Mensajes: 80
Antigüedad: 14 años
Puntos: 5
Respuesta: Menu recursivo

Cambié eso y ya no tira más error, pero el problema de los <li> hijos persiste :S

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í

Cita:
id -> int, primary key
label -> varchar (25)
parent -> int
content -> varchar (200)
y modifiqué el código del menú, que es así:

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("&amp;""##"$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 "&amp;".implode("&amp;"$newParts);
        } 
        return 
$link_parts[0].$base_var.$qs;
    } else {
        return 
$link_parts[0].$base_var;
    }
}
echo 
menu($parent_menu$sub_menu"menu""nav""subnav");
?>
Me podrían ayudar? Gracias

Última edición por Martriay; 29/07/2011 a las 17:25