Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/12/2009, 08:42
Avatar de Phoenix23
Phoenix23
 
Fecha de Ingreso: agosto-2007
Ubicación: 43.286211, -2.171349
Mensajes: 253
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Menu recursivo con esta tabla

hola maycolalvarez,

Gracias por la repuesta pero no me sirve. Si te fijas en mi tabla no tengo ningun indice ni nada que me sirva contar los niveles son todos varchar y no le puedo añadir ningun campo.

Yo antes lo tenia asi:

Código PHP:
function recorrer_menu_familias($padre, $nivel_anterior){
    
    //la consulta a la tabla familias busca los hijos del padre que entró como parametro a esta función
    $sql="SELECT Idfamilia, familia, nivel, padre FROM familia WHERE padre = $padre";   
    $result=mysql_query($sql);
    
    while($row = mysql_fetch_array($result)){
        
        $clase = $row['nivel'];
        
        switch ($clase) {
            case 0:
                $clase_fin = "clase1";
                $span_folder = "folder";
                break;
            case 1:
                $clase_fin = "clase2";
                $span_folder = "folder2";
                break;
            case 2:
                $clase_fin = "clase3";
                $span_folder = "folder3";
                break;
            case 3:
                $clase_fin = "clase4";
                $span_folder = "folder4";
                break;
        }
        
        if($GLOBALS['nivel']==""){
            //si la goblal nivel está vacia es que acaba de empecar el ciclo recursivo
            echo "<li class= 'closed $clase_fin'>";
        }else{
            //según la diferencia de nivel actual con el anterior guardada en $GLOBALS['nivel'] se cierran o abren etiquetas <Li>
            $diferencia = $row['nivel'] - $GLOBALS['nivel'];
            if($diferencia==0) echo "</li>\n<li class='closed $clase_fin'>\n"; //no ha cambiado de nivel de subfamilia respecto al anterior
            if($diferencia==1) echo "<ul>\n<li class='closed $clase_fin'>\n"; //ha subido un nivel de subfamilia respecto al anterior
            if($diferencia==-1) echo "</span></li>\n</ul>\n<li class='closed $clase_fin'>\n"; //ha bajado un nivel de subfamilia respecto al anterior
            if($diferencia < (-1)){
                //baja varios niveles de subfamilia respecto al anterior
                echo "</span></li>";
                for($i>=$diferencia;$i<0;$i++)
                    echo "</ul>\n</li>\n"; 
                echo "<li class='closed $clase_fin'>\n";
            }
        }
        //crea el enlace
        
        $padre2 = $row['padre'];
        $familia = $row['Descripcio'];
        echo "<div class='hitarea'><a href='productos.php?fam=$padre2&familia=$familia' class=$span_folder $clase_fin><span class='$span_folder'><span class='espacio'>".$row['familia']."</span></span></a></div>";
        
        //actualiza $GLOBALS['nivel'] al nivel actual
        $GLOBALS['nivel'] = $row['nivel'];
        //se llama a si mismo para comprovar quienes son los hijos de la familia actual
        recorrer_menu_familias($row['Idfamilia'],$row['nivel']);
    }
}
//muestra menu
function muestra_menu_familias(){
    recorrer_menu_familias(0, "");
    echo "</li>\n";
    for($i=0;$i==$GLOBALS['nivel'];$i++)
        echo "</ul>\n</li>\n";
}
?>
<div id="main">
    <ul id="browser" class="filetree">
        <?php muestra_menu_familias(); ?>
    </ul>
</div>
pero no me sirve por la misma razon. Espero que alguien pueda ayudarme porque me estoy volviendo loco.

Gracias y saludos
__________________
"La vida se mide por las veces que te levantas, no por las veces que te caes"

visita zarautz!!!