06/04/2003, 21:42
|
| | | Fecha de Ingreso: enero-2002 Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses Puntos: 5 | |
Mi primer OOP - Calendario PHP Yo se que este pequeño desarrollo es una NADA comparado con lo que otros pueden hacer. Pero al fin es mi primer Codigo (Clase), y como dije hace unos días, es mejor que nos convirtamos en desarrolladores que en usuarios de scripts reutilizables.
Este calendario puede ser facilmente personalizable a través de CSS sin necesidad de tocar el código, igualmente las ligas de los días, puede personalizarse MUY facilmente, y se puede decidir si dichas ligas aparecerán en todos los días, o solo en las fechas por venir, o bien solo en las fechas pasadas.
Espero que lo disfruten!! Código PHP: <? /* Clase para desplegar un calendario en español Creado por: Manolo Guerrero, Monterrey, MX email: [email][email protected][/email] Este script es gratuito, y puede ser utilizado, modificado o distribuido bajo los términos de la GNU Lesser General Public License, tal como es publicada por la Free Software Foundation.*/ Class Calendario { var $nombreMeses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"); var $nombreDias=array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"); var $nombreDiasC=array("D","L","M","M","J","V","S"); var $fechaHoy; var $mesDespliega; var $pruMes; var $pruYear; var $qstVariables="?"; // Constructor function Calendario ($mes="no"){ $diadehoy=strtotime ("-1 hour"); $diadehoy1=date("Y/m/d",$diadehoy); $diadehoy2=strtotime ($diadehoy1); $this->fechaHoy= $diadehoy2; // Si $mes no se ha especificado, o no tiene formato válido, lo sustituimos por el actual $mes = (($mes=="no" || $mes=="") || preg_match("/[0-9]{4}/",$mes)==0) ? date("ym",strtotime ("-1 hour")) : $mes; $this->mesDespliega= strtotime ($mes."01"); $this->pruMes=substr($mes,2,2); $this->pruYear=substr($mes,0,2); } // Función para rescatar las variables del query string, // Recibe los nombres separados por el signo de # (sin espacios) function RescataVariables ($variablesLista){ $variablesArray=explode ("#",$variablesLista); foreach ($variablesArray as $a){ $this->qstVariables.=$a."=".$_GET[$a]."&"; } } // Estas dos funciones crean el link para el mes siguiente y anterior function linkMesSig (){ $esteMes=$this->pruMes; $esteYear=$this->pruYear; If (($esteMes+=1)>12) { $esteYear+=1; $esteMes-=12 ; } return $this->qstVariables."mes=".str_pad($esteYear,2,"0",STR_PAD_LEFT).str_pad($esteMes,2,"0",STR_PAD_LEFT); } function linkMesAnt (){ $esteMes=$this->pruMes; $esteYear=$this->pruYear; If (($esteMes-=1)<=0) { if (($esteYear-=1)<0) { $esteYear+=100; } $esteMes+=12 ; } return $this->qstVariables."mes=".str_pad($esteYear,2,"0",STR_PAD_LEFT).str_pad($esteMes,2,"0",STR_PAD_LEFT); } // Función para traer todos los datos necesarios del mes function datosMes () { $usaGet=getdate($this->mesDespliega); $mesCal["primerdia"]=$usaGet["wday"]; $mesCal["totaldias"]=date("t",$this->mesDespliega); $mesCal["nombremes"]=$this->nombreMeses[(date("n",$this->mesDespliega))-1]; $mesCal["year"]=$usaGet["year"]; return $mesCal; } // Funcion para aplicar estilos al calendario var $estAplica=0; var $estTabla=""; var $estHead=""; var $estHead2=""; var $estOrejas=""; var $estDomingos=""; var $estNormales=""; var $estDeshab=""; var $estLigadia=""; var $estLigames=""; function estilos ($tabla="",$head="",$head2="",$orejas="",$domingos="",$normales="",$deshab="",$ligadia="",$ligames="") { $this->estAplica=1; $this->estTabla= ($tabla=="") ? "" : " class=\"".$tabla."\""; $this->estHead= ($head=="") ? "" : " class=\"".$head."\""; $this->estHead2= ($head2=="") ? "" : " class=\"".$head2."\""; $this->estOrejas= ($orejas=="") ? "" : " class=\"".$orejas."\""; $this->estDomingos= ($domingos=="") ? "" : " class=\"".$domingos."\""; $this->estNormales= ($normales=="") ? "" : " class=\"".$normales."\""; $this->estDeshab= ($deshab=="") ? "" : " class=\"".$deshab."\""; $this->estLigadia= ($ligadia=="") ? "" : " class=\"".$ligadia."\""; $this->estLigames= ($ligames=="") ? "" : " class=\"".$ligames."\""; } // Funcion para generar ligas de los días var $ligaActiva=0; var $ligaCadena=""; var $ligaTipo=0; var $ligaMismo=0; // Las siguientes dos funciones: // Habilitan la liga de las fechas, recibe la variable $cadena, que es la liga textual, // Las ocurrencias de la cadena #D# serán sustituidas por el numero del dia, y #M# y #A# por mes y año // de ese dia en formato AAAAMMDD, ademas, si tipo es 0, TODAS las fechas tendrán liga // si tipo es 1, solo las fechas POSTERIORES serán ligadas, con -1 solo las ANTERIORES se // habilitaran con liga (en ambos casos se incluye el dia en curso) // si $mismo se ingresa con valor de 1, toda la liga se sustituye por una liga a la misma // pagina, agregando la variable GET["dia"] function liga($cadena="",$tipo=0,$mismo=0) { $this->ligaActiva=1; $this->ligaCadena=$cadena; $this->ligaTipo=$tipo; $this->ligaMismo=$mismo; } function poneLiga($dato) { if ($this->ligaActiva==0) { return $dato; } else { $ligaDia=str_pad($dato,2,"0",STR_PAD_LEFT); $ligaMes=$this->pruMes; $ligaYear=$this->pruYear; $diadedato=strtotime($ligaYear.$ligaMes.$ligaDia); if ($this->ligaMismo==1) { switch ($this->ligaTipo) { case -1: if ($diadedato<=$this->fechaHoy) { return "<a href=\"".$this->qstVariables."mes=".$this->pruYear.$this->pruMes."&dia=".$ligaDia."\"".$this->estLigadia.">".$dato."</a>"; } else { return $dato; } break; case 0: return "<a href=\"".$this->qstVariables."mes=".$this->pruYear.$this->pruMes."&dia=".$ligaDia."\"".$this->estLigadia.">".$dato."</a>"; break; case 1: if ($diadedato>=$this->fechaHoy) { return "<a href=\"".$this->qstVariables."mes=".$this->pruYear.$this->pruMes."&dia=".$ligaDia."\"".$this->estLigadia.">".$dato."</a>"; } else { return $dato; } break; } } else { $remp[]=$ligaDia; $remp[]=$ligaMes; $remp[]=$ligaYear; $busc[]="/#D#/"; $busc[]="/#M#/"; $busc[]="/#A#/"; $cadenadeliga=preg_replace($busc,$remp,$this->ligaCadena); switch ($this->ligaTipo) { case -1: if ($diadedato<=$this->fechaHoy) { return "<a href=\"".$cadenadeliga."\"".$this->estLigadia.">".$dato."</a>"; } else { return $dato; } break; case 0: return "<a href=\"".$cadenadeliga."\"".$this->estLigadia.">".$dato."</a>"; break; case 1: if ($diadedato>=$this->fechaHoy) { return "<a href=\"".$cadenadeliga."\"".$this->estLigadia.">".$dato."</a>"; } else { return $dato; } break; } } return "<a href=\"".$this->ligaCadena."\"".$this->estLigadia.">".$dato."</a>"; } } // Funcion para generar el encabezado del calendario function genera (){ $datos=$this->datosMes(); $sale="<table width=\"250\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"".$this->estTabla.">\n"; $sale.=" <tr>\n"; $sale.=" <td><table width=\"250\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"".$this->estHead.">\n"; $sale.=" <tr>\n"; $sale.=" <td width=\"25\"><a href=\"".$this->linkMesAnt()."\"".$this->estLigames."><<</a></td>\n"; $sale.=" <td width=\"200\"><div align=\"center\">".$datos["nombremes"]." - ".$datos["year"]."</div></td>\n"; $sale.=" <td width=\"25\" align=\"right\"><a href=\"".$this->linkMesSig()."\"".$this->estLigames.">>></a></td>\n"; $sale.=" </tr>\n"; $sale.=" </table></td>\n"; $sale.=" </tr>\n"; $sale.=" <tr>\n"; $sale.=" <td>\n"; $sale.=" <table width=\"250\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n"; $sale.=" <tr> \n"; $sale.=" <td width=\"40\" align=\"center\"".$this->estHead2."><b>D</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>L</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>M</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>M</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>J</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>V</b></td>\n"; $sale.=" <td width=\"35\" align=\"center\"".$this->estHead2."><b>S</b></td>\n"; $sale.=" </tr>\n"; $rellenoIni=""; $rellenoFin=""; // Rellena las primeras celdas antes del primer dia del mes if ($datos["primerdia"]>0){ for ($r=0;$r<$datos["primerdia"];$r++){ $rellenoIni.=" <td> </td>\n"; } } // Despliega los días del mes $sale.=" <tr> \n"; for ($d=1;$d<=$datos["totaldias"];$d++) { If ($d==1) {$sale.=$rellenoIni;} $sale.=" <td align=\"center\"".$this->estNormal.">".$this->poneLiga($d)."</td>\n"; If (($d+$datos["primerdia"]) % 7==0) { $sale.=" </tr>\n"; } } // Rellena las ultimas celdas despues del fin del mes if (($datos["primerdia"]+$datos["totaldias"]) % 7>0) { $faltan=($datos["primerdia"]+$datos["totaldias"]) % 7; for ($f=1;$f<=(7-$faltan);$f++){ $rellenoFin.=" <td> </td>\n"; } $rellenoFin.=" </tr>\n"; $sale.=$rellenoFin; } $sale.=" </table>"; $sale.=" </td>\n"; $sale.=" </tr>\n"; $sale.=" <tr>\n"; $sale.=" <td>\n"; $sale.=" "; $sale.=" </td>\n"; $sale.=" </tr>\n"; return $sale; } } A continuación pongo las instrucciones de uso
__________________ Manoloweb |