Agregar eventos al calendario PHP -

En una publicación de blog anterior, detallé cómo crear un calendario básico usando PHP y luego le mostré cómo agregar controles a ese calendario. Esta publicación detallará cómo puede extraer eventos de manera eficiente de una tabla MySQL y mostrarlos dentro del calendario.

Índice de contenidos
  1. PHP/SQL de creación de eventos
  2. El CSS
  3. El PHP – Calendario de sorteo

PHP/SQL de creación de eventos

$events = array();$query = "SELECCIONAR título, DATE_FORMAT(event_date,'%Y-%m-%D') COMO event_date DESDE eventos DONDE event_date COMO '$año-$mes%'";$resultado = mysql_query ($query,$db_link) o die('¡no se pueden obtener resultados!'); while($fila = mysql_fetch_assoc($resultado)) {$eventos[$fila['event_date']][] = $fila;}

Siéntete libre de crear la tabla de “eventos” con la estructura que desees. La fecha del evento puede contenerse en un campo FECHA o FECHA HORA. Lo importante es que la fecha se exporte en formato AAAA-MM-DD.

El CSS

div.número-día { fondo:#999; posición:absoluta; índice z: 2; arriba: -5px; derecha: -25px; relleno: 5px; color:#fff; peso de fuente: negrita; ancho: 20px; alineacion de texto:centro; }td.día-calendario, td.día-calendario-np { ancho:120px; relleno: 5px 25px 5px 5px; borde inferior: 1px sólido #999; borde derecho: 1px sólido #999; }

El código CSS del elemento deberá cambiar ligeramente para adaptarse al posicionamiento absoluto del día. Necesitamos aplicar un posicionamiento absoluto para que el texto del evento no interrumpa la ubicación del día.

El PHP – Calendario de sorteo

Aviso de PHP: uso de constantes no definidas replace_angles – se supone 'replace_angles' en /private/tmp/temp_textmate.keFHeG en la línea 12

/* dibuja un calendario */function draw_calendar($month,$year,$events = array()){/* dibuja tabla */$calendar="table cellpadding="0"cellspacing="0"";/* table encabezados */$encabezados = array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');$calendario.= 'trtd'.implode('/tdtd ',$headings).'/td/tr';/* días y semanas vars ahora ... */$running_day = fecha('w',mktime(0,0,0,$mes,1,$año) );$days_in_month = fecha('t',mktime(0,0,0,$mes,1,$año));$days_in_this_week = 1;$day_counter = 0;$dates_array = array();/* fila para semana uno */$calendar.= 'tr';/* imprime días "en blanco" hasta el primero de la semana actual */for($x = 0; $x $running_day; $x++):$calendar.= 'tdnbsp ;/td';$days_in_this_week++;endfor;/* continúa con los días.... */for($list_day = 1; $list_day = $days_in_month; $list_day++):$calendar.= 'tddiv';/* add en el número del día */$calendar.= 'div'.$list_day.'/div';$event_day = $year.'-'.$month.'-'.$list_day;if(isset($events[$ event_day])) {foreach($events[$event_day] as $event) {$calendar.= 'div'.$event['title'].'/div';}}else {$calendar.= str_repeat(' pnbsp;/p',2);}$calendar.= '/div/td';if($running_day == 6):$calendar.= '/tr';if(($day_counter+1) != $ días_en_mes):$calendario.= 'tr';endif;$running_day = -1;$days_in_this_week = 0;endif;$days_in_this_week++; $día_corriente++; $day_counter++;endfor;/* terminar el resto de los días de la semana */if($days_in_this_week 8):for($x = 1; $x = (8 - $days_in_this_week); $x++):$calendar.= 'tdnbsp;/td';endfor;endif;/* fila final */$calendar.= '/tr';/* finalizar la tabla */$calendar.= '/table';/** DEBUG **/$ calendario = str_replace('/td','/td'."n",$calendar);$calendar = str_replace('/tr','/tr'."n",$calendar);/* todo hecho, devolver resultado */return $calendar;}function random_number() {srand(time());return (rand() % 7);}/* configuración de fecha */$mes = (int) ($_GET['mes' ] ? $_GET['mes'] : fecha('m'));$año = (int) ($_GET['año'] ? $_GET['año'] : fecha('Y'));/ * seleccionar control de mes */$select_month_control="seleccionar nombre="mes"";for($x = 1; $x = 12; $x++) {$select_month_control.= 'valor de opción="'.$x.'" '.($x != $mes ? '' : ' seleccionado="seleccionado"').''.date('F',mktime(0,0,0,$x,1,$año)).' /option';}$select_month_control.= '/select';/* seleccionar control de año */$year_range = 7;$select_year_control="seleccionar nombre="año"";for($x = ($year-floor($ rango_año/2)); $x = ($año+piso($rango_año/2)); $x++) {$select_year_control.= 'valor de opción="'.$x.'"'.($x != $año ? '' : ' seleccionado="seleccionado"').''.$x. '/option';}$select_year_control.= '/select';/* control "próximo mes" */$next_month_link = 'a href="https://soloprogramadores.top/agregar-eventos-al-calendario-php/?month=".($mes != 12 ? $mes + 1 : 1 )."año='.($mes != 12 ? $año : $año + 1).'"Mes siguiente gt;gt;/a';/* control "mes anterior" */$mes_anterior_link = 'a href ="?mes=".($mes != 1 ? $mes - 1 : 12)."año='.($mes != 1 ? $año : $año - 1).'"lt;lt; Mes anterior/a';/* juntando los controles */$controls="form Method="get"".$select_month_control.$select_year_control.'nbsp;input type="submit" name="submit" value="Go " /nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;'.$previous_month_link.'nbsp;nbsp;nbsp;nbsp;nbsp;'.$next_month_link.' /form';/* obtener todos los eventos para el mes dado */$events = array();$query = quot;SELECT title, DATE_FORMAT(event_date,'%Y-%m-%D') AS event_date FROM events WHERE event_date LIKE '$año-$mes%'quot;$resultado = mysql_query($query,$db_link) o die('¡no se pueden obtener resultados!'); while($row = mysql_fetch_assoc($resultado)) {$eventos[ $fila['event_date']][] = $fila;}echo 'h2'.date('F',mktime(0,0,0,$mes,1,$año)).' '.$año.'/h2';echo 'div'.$controles.'/div';echo 'div/div';echo draw_calendar($mes,$año,$eventos);echo 'br /br /' ;

Recuperamos los eventos del mes determinado ANTES de llamar a la función draw_calendar. Hacerlo nos permitirá evitar más de 27 consultas al no realizar consultas por cada día. La matriz de eventos es una matriz clave=valor donde la clave es la fecha y el valor es una matriz de eventos para ese día. Pasamos ese evento a la función draw_calendar y cuando llega al DIV de visualización del día ejecutamos un bucle FOREACH para generar cualquier evento.

¡Tada! ¡Feliz creación de calendario!

Te podría interesar...

Deja una respuesta

Subir