Foros del Web » Programando para Internet » PHP »

Generar ul anidados de sólo dos niveles

Estas en el tema de Generar ul anidados de sólo dos niveles en el foro de PHP en Foros del Web. caray, no me está saliendo esto! Tengo este query: Código: SELECT Year(fecha) AS anio, Month(fecha) AS mes, Count(id) AS cantidad FROM noticias GROUP BY Year(fecha), ...
  #1 (permalink)  
Antiguo 07/10/2006, 16:23
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Generar ul anidados de sólo dos niveles

caray, no me está saliendo esto!

Tengo este query:
Código:
SELECT Year(fecha) AS anio, Month(fecha) AS mes, Count(id) AS cantidad
FROM noticias
GROUP BY Year(fecha), Month(fecha)
ORDER BY fecha DESC
Ok, ese resultado con datos de ejemplo se ve así:
Código:
anio | mes | cantidad
2006 | 10 | 7
2006 | 9 | 2
2006 | 8 | 2
2005 | 9 | 1
2004 | 8 | 1
Lo quiero transforar en:

Código:
<ul>
  <li>2006
    <ul>
     <li>10 (7)</li>
     <li>09 (2)</li>
     <li>08 (2)</li>
    </ul>
  </li>
  <li>2005
    <ul>
     <li>09 (1)</li>
    </ul>
  </li>
  <li>2004
    <ul>
     <li>08 (1)</li>
    </ul>
  </li>
</ul>
Pero... como dije... no me está saliendo. No sé si porque justamente hoy es sábado o porque me estoy volviendo cada día más boludo. ¿Sugerencias? (en cuanto a la solución, no en si cada día me estoy volviendo más boludo o no ñ_ñ)

Maldición... este tipo de cosas lo he hecho cientos de veces en ASP. Debería ser lo mismo (aunque he de decir que con ul's anidados nunca lo hice, siempre usé tablas o alguna otra estructura no anidada)
__________________
...___...
  #2 (permalink)  
Antiguo 07/10/2006, 18:10
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Yo lo haría asi

Código PHP:
<?
echo "<ul>";
$anio=0;
$bandera=0;
while(
$row=mysql_fetch_array($resource))
{
     if(
$anio!=$row['anio'] && $bandera==0)
     {    echo 
"<li>".$row['anio']."<ul>";
           
$bandera=1;
     }
     elseif(
$anio!=$row['anio'] && $bandera==1)
     {    echo 
"</ul>
                </li>
                <li>"
.$row['anio']."<ul>";
     }
     else
     {
           echo 
"<li>".$row['mes']." (".$row['cantidad'].") </li>";
     }   
     
$anio=$row['anio'];
}
echo 
"</ul>
           </li>
   </ul>"
;
?>
Bueno, no lo testee, pero supongo que deberia funcionar, tengo unos cuantos ferneses en la sangre todavia pero creo que asi esta bien jajajaja.

Espero se enienda, sino entienden algo me avisan.

Saludillos.-
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #3 (permalink)  
Antiguo 08/10/2006, 14:35
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Perfecto! Muchas gracias.
Yo andaba intentándolo casi de la misma manera, pero estaba muy trabado

Sólo comentarte que te faltó algo, pero lo pude solucionar sin problemas (es lo que está en negritas):


Código:
<?
echo "<ul>";
$anio = 0;
$bandera = 0;
$res_a = mysql_query("SELECT Year(fecha) AS anio, Month(fecha) AS mes, Count(noticias.id_noticia) AS cantidad
						FROM noticias
						GROUP BY Year(fecha), Month(fecha)
						ORDER BY fecha DESC");

while($dato_a = mysql_fetch_array($res_a)){
	if($anio !== $dato_a['anio'] && $bandera == 0){
		echo "<li>" . $dato_a['anio'] . "<ul>";
	   echo "<li>" . $dato_a['mes'] . " (" . $dato_a['cantidad'] . ") </li>";
	   $bandera = 1;
	}
	elseif($anio !== $dato_a['anio'] && $bandera == 1){
	echo "</ul>
			</li>
			<li>" . $dato_a['anio'] . "<ul>";
	   echo "<li>" . $dato_a['mes'] . " (" . $dato_a['cantidad'] . ") </li>";
	}
	else{
	   echo "<li>" . $dato_a['mes'] . " (" . $dato_a['cantidad'] . ") </li>";
	}   
	$anio = $dato_a['anio'];
}
echo "</ul>
           </li>
   </ul>";
?>
Ocurre que sin eso, nunca colocaba el primer elemento anidado (el primer <li>)

Saludos y gracias
__________________
...___...
  #4 (permalink)  
Antiguo 08/10/2006, 17:05
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 1 mes
Puntos: 0
Jejejeje gracias por la corrección, tenes razón.

Saludos.-
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
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 07:55.