10.1. Crear la base de datos y mostrar eventos (PHP) - Piptonita/crear-calendario-FullCalendar GitHub Wiki
Vamos a crear la base de datos, añadiremos algunos registros y los mostraremos en el calendario.
- Creamos una base de datos a la que llamaremos calendar y en ella la siguiente tabla:
CREATE TABLE `events` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`start` varchar(50),
`end` varchar(50),
`description` varchar(255),
`color` varchar(7),
`textColor` varchar(7)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- Ahora añadimos algunos registros a la base de datos para poder mostrarlos en el calendario:
INSERT INTO events(title, start, end, description, color, textColor) VALUES ('Evento de prueba 1', '2020-09-01T12:00:00', '2020-09-05T12:00:00', 'Esto es un evento de prueba', '#F0F0F0', '#000000');
INSERT INTO events(title, start, end, description, color, textColor) VALUES ('Evento de prueba 2', '2020-09-07T12:00:00', '', 'Esto es otro evento de prueba', '#F0F0F0', '#000000');
INSERT INTO events(title, start, end, description, color, textColor) VALUES ('Evento de prueba 3', '2020-09-08', '', 'Esto es otro evento de prueba mas', '#F0F0F0', '#000000');
- vamos a crear un archivo en la raiz llamado eventos.php que se encargará de interactuar con la base de datos:
<?php
// vamos a establecer que este archivo muestre los datos como un JSON:
header('Content-Type: application/json');
// ahora conectamos con la base de datos:
$pdo = new PDO("mysql:dbname=calendar;host=localhost;", "guillermo", "guillermo");
// preparamos la consulta:
$sentenciaSQL = $pdo->prepare("SELECT * FROM events");
// la ejecutamos:
$sentenciaSQL->execute();
// guardamos el resultado en una variable:
$resultado= $sentenciaSQL->fetchALL(PDO::FETCH_ASSOC);
// y lo codificamos en JSON a la vez que lo imprmimos:
echo json_encode($resultado);
?>
Ahora si ejecutamos php -S localhost:8000
y nos vamos a la ruta http://localhost:8000/eventos.php podremos ver un JSON con las fechas.
- Ahora usamos esta ruta para reemplazar el valor de events en el calendario, para ello editamos calendar.js:
var calendarDiv = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarDiv, {
locales: 'es',
initialView: 'dayGridMonth',
headerToolbar: {
left: 'prev,crearEntrada',
center: 'title',
right: 'next',
},
footerToolbar: {
left: 'prevYear',
center: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth,today',
right: 'nextYear'
},
buttonText: {
today: 'Hoy',
month: 'Mes',
week: 'Semana',
day: 'Día',
list: 'Listado'
},
customButtons: {
crearEntrada: {
text: 'Nuevo evento',
click: ()=>{
abrirModal('crear');
vaciarCampos();
}
}
}, // al pasarle directamente la ruta del json events lo entenderá y los imprimirá:
events: "./eventos.php",
dateClick: (info) => {
abrirModal('crear');
var fecha = document.getElementById('fechaInicio');
fecha.value = info.dateStr;
},
eventClick: (info) => {
document.getElementById('tituloEntrada').innerHTML = info.event.title;
document.getElementById('titulo').value = info.event.title;
fechaInicio = cortarFecha(info.event.startStr);
document.getElementById('fechaInicio').value = fechaInicio[0];
if(fechaInicio.length > 1){
document.getElementById('horaInicio').value = fechaInicio[1];
}
fechaFin = cortarFecha(info.event.endStr);
document.getElementById('fechaFin').value = fechaFin[0];
if(fechaFin.length > 1){
document.getElementById('horaFin').value = fechaFin[1];
}
if(info.event.extendedProps.description){
document.getElementById('descripcion').value = info.event.extendedProps.description;
}
document.getElementById('color').value = info.event.backgroundColor;
document.getElementById('textColor').value = info.event.textColor;
abrirModal('editar');
},
editable: true
});
calendar.render();
Y con esto ya podemos ver los eventos que hay guardados en la base de datos.