Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/07/2012, 15:04
racba
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 19 años, 11 meses
Puntos: 3
Respuesta: Arreglar tabla horario; mostrar asignaturas en filas según día

Hola yebert:
Pense que la tabla estaba dispuesta de arriba hacia abajo porque el ancho es de 20%:
Código PHP:
Ver original
  1. echo "<table width='20%' border='1' align='center'cellpadding='2' cellspacing='0'>";
Entonces yo diria que el ancho de la tabla deberia ser por ejemplo:
Código PHP:
Ver original
  1. echo "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
Luego tenes que, la estructura de la tabla dentro del ciclo 'for' te genere una nueva tabla por cada valor de $i.
Entonces habria que sacar la mayor cantidad de <tags> posibles de los ciclos 'for'
Código PHP:
Ver original
  1. echo "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
  2.        echo "<tr width='780px'>";
  3.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>LUNES</div></td>";
  4.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MARTES</div></td>";
  5.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MIERCOLES</div></td>";
  6.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>JUEVES</div></td>";
  7.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>VIERNES</div></td>";
  8.        echo "</tr>";
  9.        echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
Como veras he sacado toda la fila con los nombres de dias que no es contenido dinamico y tambien he puesto un <tr> de apertura para una nueva fila.
He tratado de darle un ancho fijo a cada celda para que sea mas ordenado, quitando los
Código HTML:
Ver original
  1. colspan='4'
que no tienen sentido.
Al final de los ciclos 'for' cierro la fila y la tabla para que no entren en el rulo
Código PHP:
Ver original
  1. echo "</tr>";
  2.    echo "</table>";
Hasta aqui todo al pelo quedaria mas o menos asi:
Código PHP:
Ver original
  1. echo "<table width='800px' border='1' align='center'cellpadding='2' cellspacing='0'>";
  2.        echo "<tr width='780px'>";
  3.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>LUNES</div></td>";
  4.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MARTES</div></td>";
  5.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>MIERCOLES</div></td>";
  6.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>JUEVES</div></td>";
  7.          echo "<td width='150px' bgcolor='#ECE9D8'><div align='center'>VIERNES</div></td>";
  8.        echo "</tr>";
  9.        echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
  10. for ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna      
  11.     for ($j=0;$j<=4;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
  12.        
  13.        if ($inf[$j]['dia'] == $i)  
  14.          {//mostramos el valor
  15. echo "<td style='width:150px; background:#E3E9F1'>";
  16. if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
  17. if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
  18. if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
  19. if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
  20. if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
  21. if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
  22. echo "</td>";
  23.          }
  24.     }
  25. }  echo "</tr>";
  26.    echo "</table>";
El problema surge cuando se completa la primera fila en la columna del dia viernes y debe generarce una nueva fila empezando por la columna del dia Lunes
Si a $j lo establecemos en <= 4
Código PHP:
Ver original
  1. for ($j=0;$j<=4;$j++)
te completa la primera fila hasta el dia viernes.
Pero si establecemos $j en <= 5 nos agrega una columna fuera de la tabla en la misma fila y asi con todo valor de $j mayor que 4.
Para evitar esto se me acurrio hacer bloques de codigo donde el valor de $j este en un rango que valla de 5 en 5.
Por ejemplo:
Primer bloque:
Código PHP:
Ver original
  1. for ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna      
  2.     for ($j=0;$j<=4;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
  3.        
  4.        if ($inf[$j]['dia'] == $i)  
  5.          {//mostramos el valor
  6.        //echo "</tr>";
  7. echo "<td style='width:140px; background:#E3E9F1'>";
  8. if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
  9. if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
  10. if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
  11. if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
  12. if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
  13. if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
  14. echo "</td>";
  15.          }        
  16.     }    
  17. }
Agregamos un cierre de fila y un apertura de fila:
Código PHP:
Ver original
  1. echo "</tr>";
  2.   echo "<tr width='780px' border='1'cellpadding='1' cellspacing='1'>";
Segundo bloque:
Código PHP:
Ver original
  1. for ($i=1;$i<=5;$i++) {//con este for le damos el valor a las horas en una columna      
  2.     for ($j=5;$j<=9;$j++) {//con este recuperamos la informacion del arreglo y la llamamos el registro que nos interesa
  3.        
  4.        if ($inf[$j]['dia'] == $i)  
  5.          {//mostramos el valor
  6.        //echo "</tr>";
  7. echo "<td style='width:140px; background:#E3E9F1'>";
  8. if($inf[$j]['h_entrada']==''){ echo "LIBRE";}else {echo $inf[$j]['h_entrada']." - ";}
  9. if($inf[$j]['h_salida']==''){ echo "LIBRE";}else {echo $inf[$j]['h_salida']."<br>";}
  10. if($inf[$j]['materia']==''){ echo "LIBRE";}else {echo $inf[$j]['materia']."<br>";}
  11. if($inf[$j]['grado']==''){ echo "LIBRE";}else {echo $inf[$j]['grado']." - ";}
  12. if($inf[$j]['seccion']==''){ echo "LIBRE";}else {echo $inf[$j]['seccion']." - ";}
  13. if($inf[$j]['aula']==''){ echo "LIBRE";}else { echo $inf[$j]['aula']."";}
  14. echo "</td>";
  15.          }  
  16.     }    
  17. }
Donde notaras que el valor de $j en el ciclo for esta entre 5 y 9
Podria mejorar esto con una funcion que nos genere cada bloque con su correspondiente rango de $j asi no tener que escribir tanto.
Me gustaria saber si con los valores de tu base de datos te muestra los datos correctamente.
Para probar el codigo cree un array simulando los datos a mostrar, lo cual puede que en la practica real no funcione. Vos me diras si es asi.
Como comentario final estuvo interesante el problema de generar una tabla con datos de base de datos.
Espero que funcione y haber podido se util.

Última edición por racba; 16/07/2012 a las 15:54