Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Menu generado automáticamente con php y mysql

Estas en el tema de Menu generado automáticamente con php y mysql en el foro de PHP en Foros del Web. Muy buenas, tengo un pequeño problema con la generación de menús automáticos, este menú se tendrá que mostrar de acuerdo al usuario y tiene dos ...
  #1 (permalink)  
Antiguo 24/10/2012, 22:12
lac
 
Fecha de Ingreso: octubre-2012
Ubicación: El Salvador
Mensajes: 27
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Menu generado automáticamente con php y mysql

Muy buenas, tengo un pequeño problema con la generación de menús automáticos, este menú se tendrá que mostrar de acuerdo al usuario y tiene dos nives.

tengo esta tabla en mysql

Código:
idmenu	   id_usuario	nombremenu	 nivel	correlativo	url
explico:
idmenu, es el identificador del menú, el cual es único.
id_usuario, es el identificador del usuario que tiene permitido ver y utilizar el menu.
nombremenu, es el texto que aparecerá en el enlace.
nivel, muestra si es padre o submenu... 1=padre 2=submenu.
correlativo, es el numero del menu, correlativo 1 = primer menu, correlativo 2= segundo menu, etc...

hasta ahorita tengo el siguiente código, que solo me muestra el menu correlativo 1 y sus correspondientes submenus pero no me muestra el resto...

Código:
<?php
                    $dbf = new db_functions($cfg_server, $cfg_username, $cfg_password, $cfg_database);
                    $select="select * from menuusuario";
                    $resulta=$dbf->getConsulta($select);
                   
                    while ($row=mysql_fetch_array($resulta)){
                        if ($row['id_usuario'] == $idU){
                            if ($row['nivel'] == 1) {         
                                echo "<div title='$row[nombremenu]' style='overflow:auto;' id='menus'>
                                    <br>";
                            }
                            while ($row2=mysql_fetch_array($resulta)) {
                                if ($row2['nivel'] == 2 and $row['correlativo'] == $row2['correlativo']) {
                                    echo "<img src='../themes/default/images/flecha-derecha.png' alt='mg_modUsuario' width='20'/> <a href='$row2[url]' class='menu'>$row2[nombremenu]</a><br><br>";
                                }
                            }
                            echo "</div>";
                        } 
                    }
                ?>
No encuentro que mas hacer ...
¿Que me falta?

De antemano muchas gracias.
  #2 (permalink)  
Antiguo 25/10/2012, 04:41
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Menu generado automáticamente con php y mysql

Yo lo haría con una función recursiva...

La idea sería algo así

Código PHP:
function mostrarMenu($nivel$correlativo$dbf) {
    
$sql "SELECT * FROM `menu` WHERE `nivel`=$nivel AND `correlativo`=$correlativo";
    
$resultado $dbf->getConsulta($sql);
    echo 
'<ul>';
    while(
$arr mysql_fetch_array($resultado)) {
        echo 
'<li>'.$arr['nombremenu'];
        
mostrarMenu($nivel+1$arr['idmenu'], $dbf);
        echo 
'</li>';
    }
    echo 
'</ul>';

No sé si funciona, pero lo importante es q veas el concepto :)

La idea es ir recorriendo el "nivel 0" (o 1, depende como sea para ti!). Y por cada elemento de estos, recorrer todos sus hijos. Por cada hijo, recorrer todos sus hijos... así hasta el infinito!

Yo reformaria la tabla a algo así
idmenu | nombremenu | padre | url

No entiendo pq necesitas "nivel" y "correlativo". Al ser padre 0 sabes q es "primer nivel", sino, sabes q depende de otro (por ejemplo!)

Y se quedaria más sencillo el código:
Código PHP:
function mostrarMenu($padre $dbf) {
    
$sql "SELECT * FROM `menu` WHERE `padre`=$padre";
    
$resultado $dbf->getConsulta($sql);
    echo 
'<ul>';
    while(
$arr mysql_fetch_array($resultado)) {
        echo 
'<li>'.$arr['nombremenu'];
        
mostrarMenu($arr['idmenu'], $dbf);
        echo 
'</li>';
    }
    echo 
'</ul>';

Pero, para gustos, colores ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 25/10/2012, 08:13
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Menu generado automáticamente con php y mysql

No te compliques la vida. Usa este aporte de truman truman que es bastante sencillo y menos lioso de lo que tienes ahora.

http://www.forosdelweb.com/f18/aport...s-mas-1011423/
__________________
Blog de humor http://elcuasatar.net63.net/
  #4 (permalink)  
Antiguo 25/10/2012, 20:35
lac
 
Fecha de Ingreso: octubre-2012
Ubicación: El Salvador
Mensajes: 27
Antigüedad: 11 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Menu generado automáticamente con php y mysql

Muchas gracias por su ayuda, pero no era precisamente lo que buscaba, no podía cambiar la base de datos.

Al final logre generar el menú de forma dinámica sin problemas, les dejos la solución, espero les sirva a alguien mas.

Código PHP:
<?php
                    $dbf 
= new db_functions($cfg_server$cfg_username$cfg_password$cfg_database);
                    
$select ="select * from menuusuario where id_usuario =".$idU;
                    
$select1="select * from menuusuario where nivel = 2";
                    
$select2="select max(correlativo) from menuusuario where id_usuario =".$idU;
                    
$maxCorrelativo $dbf->getConsulta($select2);
                    
$resulta=$dbf->getConsulta($select);
                    for (
$i=0$i $maxCorrelativo$i++) { 
                    
                        
                        while (
$row=mysql_fetch_array($resulta)){
                            if (
$row[nivel]==1){
                                        
                                    echo 
"<div title='$row[nombremenu]' style='overflow:auto;' id='menus'>
                                        <br>"
;
                                        
                                
$resulta1=$dbf->getConsulta($select1);
                                while (
$row1=mysql_fetch_array($resulta1)) {
                                    if (
$row1['correlativo'] == $row['correlativo']) {
                                        echo 
"<img src='../themes/default/images/flecha-derecha.png' alt='mg_modUsuario' width='20'/> <a href='$row1[url]' class='menu'>$row1[nombremenu]</a><br><br>";
                                    }
                                    
                                }
                                echo 
"</div>";
                            } 
                        }
                    } 
?>
  #5 (permalink)  
Antiguo 26/10/2012, 09:22
lac
 
Fecha de Ingreso: octubre-2012
Ubicación: El Salvador
Mensajes: 27
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Menu generado automáticamente con php y mysql

Recién estaba testeando la aplicación y me daba un pequeño problema pero ya lo solucione, dejo el código completo.

Código PHP:
<?php
                    $dbf 
= new db_functions($cfg_server$cfg_username$cfg_password$cfg_database);
                    
$select ="select * from menuusuario where id_usuario =".$idU;
                    
$select1="select * from menuusuario where nivel = 2";
                    
$select2="select max(correlativo) from menuusuario where id_usuario =".$idU;
                    
$maxCorrelativo $dbf->getConsulta($select2);
                    
$resulta=$dbf->getConsulta($select);
                    
                    for (
$i=0$i $maxCorrelativo$i++) { 
                    
                        
                        while (
$row=mysql_fetch_array($resulta)){
                            if (
$row[nivel]==1){
                                        
                                    echo 
"<div title='$row[nombremenu]' style='overflow:auto;' id='menus'>
                                        <br>"
;
                                        
                                
$resulta1=$dbf->getConsulta($select1);
                                
$id;
                                while (
$row1=mysql_fetch_array($resulta1)) {
                                    if (!
in_array($row1[idmenu], $id)) {
                                        if (
$row1['correlativo'] == $row['correlativo']) {
                                            echo 
"<img src='../themes/default/images/flecha-derecha.png' alt='mg_modUsuario' width='20'/> <a href='$row1[url]' class='menu'>$row1[nombremenu]</a><br><br>";
                                            
$id[]=$row1[idmenu];
                                        }
                                    }
                                }
                                echo 
"</div>";
                            } 
                        }
                    } 
                
?>

Etiquetas: dinamico, menúdinámico, mysql, php+
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:53.