Подтвердить что ты не робот

Jquery full calendar: установить другой цвет для каждого события из front-end

Вот как я использую плагин:

jQuery( document ).ready( function() {
            jQuery('#booking-calendar').fullCalendar({
                header: {
                    left: 'prev,next',
                    center: 'title',
                    right: 'month,basicWeek,basicDay'
                },
                editable: true,
                events: '<?php echo get_template_directory_uri() ?>/bookings-feed.php'
            });

            jQuery( '#apartment-selector' ).change( function() {
                apartment = jQuery( this ).val()
                jQuery('#booking-calendar').fullCalendar( 'removeEvents' )
                jQuery('#booking-calendar').fullCalendar( 'addEventSource',  {
                    url: '<?php echo get_template_directory_uri() ?>/bookings-feed.php',
                    type: 'POST',
                    data: {
                        apartment : apartment
                    }
                })
            })
        })

И вот как это выглядит:

enter image description here

Как вы можете видеть, это трудно отследить, когда событие начинается и заканчивается, поэтому я думал об изменении цвета каждого события,

Проблема заключается в том, что каждое событие может быть разделено на разные недели (например, в примере), и каждая неделя имеет другое событие DOM (которое имеет смысл), и у них нет соответствующего класса,

Любая идея, как я могу раскрасить по-разному каждое событие?

Спасибо!

4b9b3361

Ответ 1

Чтобы раскрасить каждое событие по-разному, есть несколько подходов, которые вы можете предпринять, чтобы решить вашу проблему.

  • Обновите фид событий /bookings -feed.php и добавьте цвет (фон и рамка), backgroundColor, textColor или borderColor к объекту http://arshaw.com/fullcalendar/docs/event_data/Event_Object/.

    events: [{
        title  : 'event1',
        start  : '2010-01-01',
        color  : '#000'
    }]
    
  • Разделите и обновите фиды событий, чтобы использовать eventSources. Это позволяет группировать события по цвету и цвету текста. http://arshaw.com/fullcalendar/docs/event_data/events_array/.

    $( '# календарь'). FullCalendar ({

    eventSources: [
    
        // your event source
        {
            events: [ // put the array in the `events` property
                {
                    title  : 'event1',
                    start  : '2010-01-01'
                },
                {
                    title  : 'event2',
                    start  : '2010-01-05',
                    end    : '2010-01-07'
                },
                {
                    title  : 'event3',
                    start  : '2010-01-09 12:30:00',
                }
            ],
            color: 'black',     // an option!
            textColor: 'yellow' // an option!
        }
    
        // any other event sources...
    
    ]
    

Ответ 2

Вы можете попробовать использовать обратный вызов eventAfterRender. Проверьте документацию.

Таким образом, вы получите событие "целое" и манипулируете его цветом на основе случайного выбора.

Просто чтобы вы могли понять, я работаю с этим обратным вызовом, но цвет меняется в зависимости от дня события. Цвет изменяется, если событие запланировано, происходит или уже произошло.

eventAfterRender: function (event, element, view) {
        var dataHoje = new Date();
        if (event.start < dataHoje && event.end > dataHoje) {
            //event.color = "#FFB347"; //Em andamento
            element.css('background-color', '#FFB347');
        } else if (event.start < dataHoje && event.end < dataHoje) {
            //event.color = "#77DD77"; //Concluído OK
            element.css('background-color', '#77DD77');
        } else if (event.start > dataHoje && event.end > dataHoje) {
            //event.color = "#AEC6CF"; //Não iniciado
            element.css('background-color', '#AEC6CF');
        }
    },

Ответ 3

        events: [
            {
                start: '2017-11-24',
                end: '2017-11-28',
                overlap: false,
                rendering: 'background',
                color: '#257e4a'
            },
            {
                start: '2017-11-06',
                end: '2017-11-08',
                overlap: false,
                rendering: 'background',
                color: '#ff9f89'
            }]