es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

FullCalender – Cómo obtener y mostrar automáticamente eventos anteriores?

Estoy tratando de mostrar eventos anteriores en fullCalendar. Pero hay un problema: después de definir un evento y luego actualizar la página, los eventos desaparecen.

¿Hay alguna manera de obtener todos los detalles de todos los eventos anteriores y mostrarlos en el calendario?

Este es mi código:

document.addEventListener('DOMContentLoaded', function() {
    var calendarEl = document.getElementById('calendar');

    let calendar = new FullCalendar.Calendar(calendarEl, {
        timeZone: 'UTC',
        initialView: 'dayGridMonth',
        selectable: true,
        headerToolbar: {
            left: 'prev,next',
            center: 'title'
        },
        editable: true,
        eventClick: function(info) {
            info.jsEvent.preventDefault(); // no permitir que el navegador navegue

            if (info.event.url) {
                window.open(info.event.url);
            }
        },
        dateClick: function(info) {
            endDate = info.dateStr;
            localStorage.enddate = info.dateStr;
            setTimeout(cal, 1000);

            function cal() {
                if (imgUrl !== '' && today <= endDate) {
                    calendar.addEvent({
                        title: `Post ${l++}`,
                        url: `${imgUrl}`,
                        start: `${today}`,
                        end: `${endDate}`
                    });

                    imgUrl = '';
                } else if (today > endDate) {
                    alert('¡Seleccione una fecha que esté en el futuro!');
                } else {
                    return;
                }
            }

            var today = new Date();
            var dd = String(today.getDate()).padStart(2, '0');
            var mm = String(today.getMonth() + 1).padStart(2, '0'); // Enero es 0
            var yyyy = today.getFullYear();
            today = yyyy + '-' + mm + '-' + dd;

            const date1 = new Date(`${today}`);
            const date2 = new Date(`${endDate}`);
            seconds = date2 - date1;
            console.log(seconds);
        }
    });

    calendar.render();
});

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar eventos anteriores en FullCalendar después de actualizar la página, puedes hacer uso de un sistema de almacenamiento como LocalStorage para guardar todos los detalles del evento. Puedes agregar un event listener para capturar los eventos eventAdd y eventChange, y guardar los detalles del evento en LocalStorage. Luego, durante la actualización de la página, puedes obtener los detalles del evento guardados en LocalStorage y agregarlos al calendario usando el método addEvent. Aquí tienes una versión modificada de tu código que implementa este enfoque:

    document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var localStorageKey = 'savedEvents'; // define una clave para LocalStorage
    
        let calendar = new FullCalendar.Calendar(calendarEl, {
            //... otras opciones
            eventAdd: function(info) {
                // guardar los detalles del evento en LocalStorage cuando se agrega un evento
                var savedEvents = JSON.parse(localStorage.getItem(localStorageKey)) || [];
                savedEvents.push(info.event);
                localStorage.setItem(localStorageKey, JSON.stringify(savedEvents));
            },
            eventChange: function(info) {
                // actualizar el evento guardado en LocalStorage cuando se cambia un evento
                var savedEvents = JSON.parse(localStorage.getItem(localStorageKey));
                var eventIndex = savedEvents.findIndex(function(event) {
                    return event.id === info.event.id;
                });
                savedEvents[eventIndex] = info.event;
                localStorage.setItem(localStorageKey, JSON.stringify(savedEvents));
            }
        });
    
        // obtener los eventos guardados de LocalStorage y agregarlos al calendario
        var savedEvents = JSON.parse(localStorage.getItem(localStorageKey));
        if (savedEvents) {
            savedEvents.forEach(function(savedEvent) {
                calendar.addEvent(savedEvent);
            });
        }
    
        calendar.render();
    });
    

    En esta versión, hemos agregado dos event handlers al objeto calendar: eventAdd y eventChange. Estos handlers guardan los detalles del evento agregado o cambiado en LocalStorage. Luego, durante la inicialización, obtenemos los eventos guardados de LocalStorage y los agregamos al calendario usando el método forEach. De esta manera, al actualizar la página, los eventos previamente agregados se mostrarán en el calendario.

Comments are closed.