214
« en: 18 de Febrero 2016, 10:35 »
Buenos días
Voy a hacer algunos comentarios comparando tu ejercicio con el propuesto en otro hilo del foro.
El propuesto en otro hilo era este (lo llamaré "código alternativo"):
<h1>Calendario</h1>
<style>
table{
width:300px;
font-size:24px;
}
</style>
<?php
$mes = date("m");
$año = date ("Y");
$semana = array ("Mon","Tue", "Wed", "Thu","Fri","Sat","Sun");
echo "<table>";
echo "<thead>";
echo "<tr>";
echo "<th colspan='7'>",date("M, Y"),"</th>";
echo "</tr>";
echo "<tr>";
echo "<th>Lu</th><th>Ma</th><th>Mi</th><th>Ju</th><th>Vi</th><th>Sa</th><th>Do</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
//// MARCO EL DÍA 1º DEL MES: ////////////////////
echo "<tr>";
for ($i=0;$i<=6;$i++){
if (date("D",mktime(0,0,0,$mes,1,$año))==$semana[$i]){
echo "<td>", date("d", mktime(0,0,0,$mes,1,$año)) ,"</td>";
if ( date("D",mktime(0,0,0,$mes,1,$año))=="Sun" ){
echo "</tr>","<tr>";
break;
}else{
break;
}
break;
}else{
echo "<td>", "</td>" ;
}
}
/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t");$j++){
if ( date("D",mktime(0,0,0,$mes,$j,$año))=="Sun" ) {
echo "<td>", date("d", mktime(0,0,0,$mes,$j,$año)), "</td >", "</tr>", "<tr>";
}else{
echo "<td>", date("d", mktime(0,0,0,$mes,$j,$año)) , "</td>" ;
}
}
echo "</tr>";
echo "</tbody>";
echo "</table>";
?>
Los comentarios serían los siguientes:
En tu código independizas la definición o cálculo del calendario en una función, en otra su dibujado y en otra la construcción de la página desde donde se llama a las funciones. Esto es un buen diseño ya que permites la reutilización de las funciones en otros contextos. Es quizás un diseño un tanto más avanzado de lo explicado en el curso donde los diseños son muy simples, pero es interesante tanto para tí hacerlos si tienes capacidad para ello como para otras personas que vean este ejercicio, porque contiene una estructuración del código muy interesante. Por tanto tu diseño es bastante mejor que el del código alternativo.
Tu código se ve más largo que el código alternativo. No siempre esto es malo, pero en general se considera que cuanto más breve sea un código mejor. Habría que revisar punto por punto y ver si se puede reducir. Sólo te voy a poner un ejemplo:
Planteas este código:
switch ($month) { // Obtenemos el nombre en castellano del mes
case 1 : $month_name = "Enero";
break;
case 2 : $month_name = "Febrero";
break;
case 3 : $month_name = "Marzo";
break;
case 4 : $month_name = "Abril";
break;
case 5 : $month_name = "Mayo";
break;
case 6 : $month_name = "Junio";
break;
case 7 : $month_name = "Julio";
break;
case 8 : $month_name = "Agosto";
break;
case 9 : $month_name = "Septiembre";
break;
case 10 : $month_name = "Octubre";
break;
case 11 : $month_name = "Noviembre";
break;
case 12 : $month_name = "Diciembre";
}
Esto parece que podría reducirse creando un array con los nombres de los meses (en 1 línea) y asignando el month_name según el valor de month en otra línea. Parece que con dos o tres líneas podría resolverse este código, que en tu caso comprende 23 ó 24 líneas. El resto del código habría que verlo en el mismo sentido. Respecto a esto hay que excluir los comentarios, que no cuentan. Al revés, debe valorarse positivamente que hayas comentado ampliamente el código.
En tu código para mostrar el mes actual aparece draw_calendar_v1(2,2016);
Supongo que eso era una prueba y que realmente debe ser draw_calendar_v1($month,$year);
Sería interesante ver la función que comentas que estás creando para mostrar cualquier array en una tabla, seguro que puede ser útil para muchas personas
En resumen, felicitarte porque se ve un código bien trabajado y que funciona bien
Saludos