Foros del Web » Programando para Internet » PHP »

etiqueta <ul></ul> dentro de bucle while

Estas en el tema de etiqueta <ul></ul> dentro de bucle while en el foro de PHP en Foros del Web. hola gentes, siguiendo las lecciones del profe GatorV logre hacer un menu que muestre las categorias con sus respectivas subcategorias, pero se me descuadra el ...
  #1 (permalink)  
Antiguo 16/01/2008, 09:44
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
etiqueta <ul></ul> dentro de bucle while

hola gentes, siguiendo las lecciones del profe GatorV logre hacer un menu que muestre las categorias con sus respectivas subcategorias, pero se me descuadra el asunto, pues las subcategorias las quiero poner dentro de una lista, y como todo va dentro de un bucle se me repite desde la etiqueta <ul> y termina el el cierre </ul>:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* FROM categorias, subcategorias
                         WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
                         ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";                         
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"<h1>".$row -> categoriaCategoria."...</h1>";
        
$categoria $row -> categoriaCategoria;
    }    
    echo 
"<ul class='sidemenu'><li><a href='index.php?mod=categoria&amp;categoriaID=".$row -> subcategoria_ID."'>".$row -> subcategoriaSubcategoria."</a></li></ul>";
}
?>
el asutno es que no se puede repetir la etiqueta ul, pues me descuadra, y por mas que lo miro y lo miro, no veo como hacerlo, pues lo que se debe repetir son las li.

alguna idea???

gracias mil de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 16/01/2008, 09:49
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: etiqueta <ul></ul> dentro de bucle while

Hola:

No estoy seguro que tu problem sea php... so se tratará de estilos de márgenes aplicados a etiquetas de listas (ul/li)... hay otra alternativas de etiquetas (dl/dt/dd), pero sobre todo, puedes aplicar estilos a los elementos de listas...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 16/01/2008, 09:50
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: etiqueta <ul></ul> dentro de bucle while

Prueba con esto:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* 
        FROM categorias, subcategorias
        WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
        ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"<h1>".$row -> categoriaCategoria."...</h1>
        <ul class='sidemenu'>"
;
        
$categoria $row -> categoriaCategoria;
    }
    echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=".$row -> subcategoria_ID."'>".$row -> subcategoriaSubcategoria."</a></li></ul>";
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"</ul>";
    }
}
?>
O con esto:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* 
        FROM categorias, subcategorias
        WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
        ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";
echo 
"<ul class='sidemenu'>";
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"<h1>".$row -> categoriaCategoria."...</h1>";
        
$categoria $row -> categoriaCategoria;
    }
    echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=".$row -> subcategoria_ID."'>".$row -> subcategoriaSubcategoria."</a></li></ul>";
}
echo 
"</ul>";
?>
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 16/01/2008, 10:05
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

No estoy seguro que tu problem sea php... so se tratará de estilos de márgenes aplicados a etiquetas de listas (ul/li)... hay otra alternativas de etiquetas (dl/dt/dd), pero sobre todo, puedes aplicar estilos a los elementos de listas...

Saludos
el problemas no es php, el problemas es capricho mio de meter el menu dentro de una lista (que es lo correcto), pero es que como ul esta dentro del bucle, hace una lista nueva para cada subcategoria, debolviendo algo asi:
Código PHP:
<h1>Categoria</h1>
<
ul>
    <
li>SubCategoria</li>
</
ul>
<
ul>
    <
li>SubCategoria</li>
</
ul>
<
ul>
    <
li>SubCategoria</li>
</
ul>
<
ul>
    <
li>SubCategoria</li>
</
ul
y lo que quiero es que me devuelva esto:
Código PHP:
<h1>Categoria</h1>
<
ul>
    <
li>SubCategoria</li>
    <
li>SubCategoria</li>
    <
li>SubCategoria</li>
    <
li>SubCategoria</li>
</
ul
marvin, tus ejemplo no me funcionan como quiero, se enredan...

bueno, creo que dejare el asunto de la lista y los pondre con vinculos y por CSS ya los acomodare como quiero.

gracias a ambos por sus aportes

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 16/01/2008, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: etiqueta <ul></ul> dentro de bucle while

Prueba asi:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* FROM categorias, subcategorias
                         WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
                         ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";                         
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"<h1>".$row -> categoriaCategoria."...</h1>";
        
$categoria $row -> categoriaCategoria;
        echo 
"<ul class='sidemenu'>";
    }    

    echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=".$row -> subcategoria_ID."'>".$row -> subcategoriaSubcategoria."</a></li>";

    if(
$categoria != $row -> categoriaCategoria){
           echo 
"</ul>";
    }
}
?>
Saludos.
  #6 (permalink)  
Antiguo 17/01/2008, 07:39
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

buenos dias por la mañana, moderador, tu codigo me funciona, pero, no cierra el ul, he estado mirando el codigo, pero es que en realidad no lo entiendo mucho, lo que hice desde el inicio fue copiar del otro post y adaptarlo a lo mio, pero en realidad no lo entiendo, es por eso que no pude resolverlo , pero si le meti los pies, a ver, para que tengo que declarar la variable $categoria sin ningun valor? porque la comente y no paso nada, no error, bueno al final no pude hacer mucho

por fa ayuda con esto

saludos y gracias
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 17/01/2008, 10:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: etiqueta <ul></ul> dentro de bucle while

A ver probemos esto:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* FROM categorias, subcategorias
                         WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
                         ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";
$categorias = array();
$pos 0;
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        echo 
"<h1>".$row -> categoriaCategoria."...</h1>";
        
$categoria $row -> categoriaCategoria;
        
$pos array_push$categorias,  array( $categoria, array() ) );
    }    
    
$categorias[$pos][1][] = array( $row->subcategoria_ID$row -> subcategoriaSubcategoria );
    
}

foreach( 
$categorias as $categoria ) {
         echo 
"<h1>" $categoria[0] . "</h1>";
         echo 
"<ul class='sidemenu'>";
         foreach( 
$categoria[1] as $subCat ) {
                  echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=".$subCat[0]."'>".$subCat[1]."</a></li>";
         }
         echo 
"</ul>";
}
?>
Saludos.
  #8 (permalink)  
Antiguo 17/01/2008, 10:28
 
Fecha de Ingreso: enero-2008
Mensajes: 75
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: etiqueta <ul></ul> dentro de bucle while

coloca el <ul> arriba del while
  #9 (permalink)  
Antiguo 17/01/2008, 10:47
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

nop... me pone un enredo, primero me manda todas las categorias en etiquetas <h1>, despues si lo hace bien, pero, mejor te pongo lo que devuelve:
Código HTML:
<h1>De la cultura...</h1>
<h1>Directorio...</h1>
<h1>Secciones...</h1>
<h1>De la cultura</h1>
<ul class='sidemenu'>
</ul>
<h1></h1>
<ul class='sidemenu'>
    <li><a href='#'>Personalidades</a></li>
    <li><a href='#'>Actividades</a></li>
    <li><a href='#'>Manifestaciones</a></li>
    <li><a href='#'>Casa de la Cultura</a></li>
    <li><a href='#'>Instituciones</a></li>
</ul>
<h1>Directorio</h1>
<ul class='sidemenu'>
</ul>
<h1></h1>
<ul class='sidemenu'>
    <li><a href='#'>Centros Comerciales</a></li>
    <li><a href='#'>La Television</a></li>
    <li><a href='#'>San Cristobal de la Habana</a></li>
    <li><a href='#'>Otros</a></li>
</ul> 
y asi repite la otra, pero si te fijas, aqui esta el palo:
Código HTML:
<ul class='sidemenu'>
</ul>
<h1></h1> 
como siempre gracias mil por la ayuda, pero si se enreda mucho la cosa, le quito la lista y lo arreglo con CSS pa que se muestre como queiro
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #10 (permalink)  
Antiguo 17/01/2008, 10:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: etiqueta <ul></ul> dentro de bucle while

Lo siento me falto quitar el echo:
Código PHP:
<?php
$sqlQuery 
mysql_query("SELECT categorias.*, subcategorias.* FROM categorias, subcategorias
                         WHERE categorias.categoria_ID = subcategorias.subcategoriaCategoriaID
                         ORDER BY categoriaCategoria ASC"
$db_link) or die(mysql_error());

$categoria "";
$categorias = array();
$pos 0;
while (
$row mysql_fetch_object($sqlQuery)){
    if(
$categoria != $row -> categoriaCategoria){
        
$categoria $row -> categoriaCategoria;
        
$pos array_push$categorias,  array( $categoria, array() ) );
    }    
    
$categorias[$pos][1][] = array( $row->subcategoria_ID$row -> subcategoriaSubcategoria );
    
}

foreach( 
$categorias as $categoria ) {
         echo 
"<h1>" $categoria[0] . "</h1>";
         echo 
"<ul class='sidemenu'>";
         if( 
count$categoria[1] ) > ) {
                  foreach( 
$categoria[1] as $subCat ) {
                          echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=".$subCat[0]."'>".$subCat[1]."</a></li>";
                  }
                  echo 
"</ul>";
         }
}
?>
Saludos.
  #11 (permalink)  
Antiguo 17/01/2008, 11:39
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

ño...! a punto estaba de desistir, pero creo que ya casi lo logramos, hice esto:
Código PHP:
foreach ($categorias as $categoria)
{
    echo 
"<h1>" $categoria[0] . "</h1>";
    echo 
"<ul class='sidemenu'>";
    if (
count($categoria[1]) > 0)
    {
        foreach (
$categoria[1] as $subCat)
        {
            echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=" $subCat[0] . "'>" .
                
$subCat[1] . "</a></li>";
        }
    }
    echo 
"</ul>"// saque este echo del if
}
?> 
antes me mandaba 9 errores de validacion, ahora solo tres, me esta devolviendo esto:
Código HTML:
<h1>De la cultura</h1>
<ul class='sidemenu'>
</ul>
<h1></h1>
<ul class='sidemenu'>
    <li><a href='#'>Personalidades</a></li>
    <li><a href='#'>Actividades</a></li>
    <li><a href='#'>Manifestaciones</a></li>
    <li><a href='#'>Casa de la Cultura</a></li>
    <li><a href='#'>Instituciones</a></li>
</ul> 
me viene sobrando esto:
Código HTML:
<h1>De la cultura</h1>
<ul class='sidemenu'>
</ul>
<h1></h1> 
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #12 (permalink)  
Antiguo 17/01/2008, 11:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: etiqueta <ul></ul> dentro de bucle while

Mas bien metelos dentro del if:
Código PHP:
foreach ($categorias as $categoria)
{
    if( !empty( 
$categoria[0] ) ) {
           echo 
"<h1>" $categoria[0] . "</h1>";
    }
    if (
count($categoria[1]) > 0)
    {
        echo 
"<ul class='sidemenu'>";
        foreach (
$categoria[1] as $subCat)
        {
            echo 
"<li><a href='index.php?mod=categoria&amp;categoriaID=" $subCat[0] . "'>" .
                
$subCat[1] . "</a></li>";
        }
        echo 
"</ul>";
    }

Saludos.
  #13 (permalink)  
Antiguo 17/01/2008, 12:26
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

siiii...! ahora si, gracias como siempre por tener tanta paciencia, pero moderador, seria mucho pedir que me explicara este codigo? que me comentes algunas linias o al menos me digas por arribita como funciona el while y el foreach.

gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #14 (permalink)  
Antiguo 17/01/2008, 12:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: etiqueta <ul></ul> dentro de bucle while

Mmm tanto el while como el foreach son funciones para ciclar, así tal cual tu primer código, lo único que hice fue crear una estructura primeramente en el while extraigo los datos y creo la estructura.

Luego en el foreach ya dibujo la lista tomando en cuenta la estructura que se hizo mas arriba.

Saludos.
  #15 (permalink)  
Antiguo 17/01/2008, 13:08
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

ok, gracias, ya mas o menos voy captando la idea

gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #16 (permalink)  
Antiguo 17/01/2008, 13:55
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: etiqueta <ul></ul> dentro de bucle while

Metiéndome donde no me llaman

While es una construcción que permite ejecutar un ciclo, siempre que una condicion se siga cumpliendo, o mejor dicho, mientras que la condición o la expresíón no devuelva false.

EJEMPLO:

Código PHP:
$i 1;
 
//Le digo que ejecute el bucle siempre que se cumpla que $i es menor a 5
while( $i ) {
 
    echo 
"$i <br>";
 
    
//Incremento el valor de $i, ya que si no lo hago, el bucle nunca termina
    
$i++;

Así, el bucle se ejecuta 4 veces, ya que en la quinta $i será igual a 5, por lo tanto ya no se cumple la condición, por lo tanto se escapa del bucle.

Ahora, el while se usa muy frecuentemente para mostrar datos de una consulta a una base de datos. La lógica es similar. Al usar funciones del tipo mysql_fetch_algo, lo que se hace es recorrer el array que contiene el resultado. Cuando se llega al último elemento del array la función devuelve false, por lo que se detiene el ciclo.

Cita:
Iniciado por php.net
El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s) sentencia(s) anidada(s) repetidamente, mientras la expresión while se evalúe como TRUE. El valor de la expresión es comprobado cada vez al principio del bucle, así que incluso si este valor cambia durante la ejecución de la(s) sentencia(s) anidada(s), la ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta las sentencias en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarán ni siquiera una vez.
Foreach también te ha de generar un bucle, pero a diferencia del primero, que requiere una condición, este tipo de construccion (no es una funcion) requiere una matriz (array), y ejecuta el ciclo para cada elemento del array:

Código PHP:
 
$arr 
= array("a"=>"avion""b"=>"barco""c"=>"casa");
 
foreach(
$arr as $indice=>$valor) {
    echo 
"El índice <b>$indice</b> está asignado al valor <b>$valor</b> <br>";

Cita:
Iniciado por php.net
Esto simplemente da un modo fácil de iterar sobre matrices. foreach funciona solamente con matrices y devolverá un error si se intenta utilizar con otro tipo de datos ó variables no inicializadas.
Mejor que esto, el manual de PHP

Un saludo,
  #17 (permalink)  
Antiguo 17/01/2008, 14:14
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: etiqueta <ul></ul> dentro de bucle while

hola @colaborador, con la sintesis que me dio el moderador y ahora con esta dicertacion, cada vez lo veo mas claro y voy entendiendo mejor, es que no me gusta copiar y pegar codigo asi por asi, me hece falta entender lo que tengo, si no, no aprendo na de na

gracias mil una vez mas, osease, gracias miluna, jajajjaa
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
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 08:00.