fullCalendar jQuery, powtarzać w każdy poniedziałek?

Normalnie jest to wydarzenie w kalendarzu:

            {

                title: 'Test',

                start: '2012-06-08',

                end: '2012-06-08',

                url: 'test/test'

            },
Działa dobrze. Chociaż jak Mogę zrobić 1 wydarzenie, które pokazuje się w każdy poniedziałek w kalendarzu? Lub każdy wtorek i tak dalej zależy od tego, który dzień tygodnia/numer wprowadzić? Co to za param, jeśli taki istnieje?

Jeśli nie istnieje, Czy Mogę w jakiś sposób zmodyfikować i dodać funkcję do tego celu? Możesz więc wprowadzić param jak repeatEveryWeekDay: 2( czyli poniedziałek), wtedy we wszystkich przyszłych poniedziałkach dane będą tam wyświetlane.

I próbowałem szukać http://arshaw.com/fullcalendar/docs/event_data/Event_Object / ale nic nie mogę znaleźć.

Author: Karem, 2012-06-17

4 answers

fullCalendar pozwala na to, że zamiast przekazywania tablicy zdarzeń, można przekazać funkcję, która na przykład pobiera zdarzenia z serwera lub dynamicznie generuje te zdarzenia.

Większość przykładów w dokumentacji używa żądań HTTP do pobierania danych zdarzeń. Ale funkcja zwrotna jest nadal wystarczająco elastyczna, aby działała tak, jak chcesz.

Spójrz na poniższy przykład, który właśnie dla Ciebie napisałem:

$(document).ready(function() {

    var date = new Date();
    var d = date.getDate();
    var m = date.getMonth();
    var y = date.getFullYear();

    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        editable: true,
        events: [
            // some original fullCalendar examples
            {
                title: 'All Day Event',
                start: new Date(y, m, 1)
            },
            {
                title: 'Long Event',
                start: new Date(y, m, d-5),
                end: new Date(y, m, d-2)
            },
            {
                id: 999,
                title: 'Repeating Event',
                start: new Date(y, m, d-3, 16, 0),
                allDay: false
            }
        ]
    });

    // adding a every monday and wednesday events:
    $('#calendar').fullCalendar( 'addEventSource',        
        function(start, end, callback) {
            // When requested, dynamically generate virtual
            // events for every monday and wednesday.
            var events = [];

            for (loop = start.getTime();
                 loop <= end.getTime();
                 loop = loop + (24 * 60 * 60 * 1000)) {

                var test_date = new Date(loop);

                if (test_date.is().monday()) {
                    // we're in Moday, create the event
                    events.push({
                        title: 'I hate mondays - Garfield',
                        start: test_date
                    });
                }

                if (test_date.is().wednesday()) {
                    // we're in Wednesday, create the Wednesday event
                    events.push({
                        title: 'It\'s the middle of the week!',
                        start: test_date
                    });
                }
            } // for loop

            // return events generated
            callback( events );
        }
    );
});

Powyższa funkcja automatycznie generuje zdarzenie dla w każdy poniedziałek i środę między dwoma datami. Daty podane są w paramach start i end. Paramy te przekazywane są przez fullCallendar. Zdarzenia generowane przez powyższą funkcję są zwracane do fullCallendar poprzez funkcję callback w trzecim param.

Używam DateJS aby sprawdzić, czy dana Data jest poniedziałkiem.

UPDATE: jeśli chcesz mieszać statyczne zdarzenia i / lub [więcej niż jedno] powtarzalne Zdarzenie, możesz użyć addEventSource.

 34
Author: Christopher Ramírez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-09 04:25:05

Mała aktualizacja do posta Christophera Ramíreza. Używając fullCalendar w v2.2.3 i momentjs w v2.8.4 musisz zmienić kilka linijek w powyższym fragmencie, aby to działało:

Pierwszy:

function(start, end, callback) {}

Do

function(start, end, status, callback) {}

Ponieważ trzeci parametr jest logiczny, a czwarty jest funkcją wywołania zwrotnego

Wtedy:

for (loop = start.getTime();
     loop <= end.getTime();
...

Do

for (loop = start._d.getTime();
     loop <= end._d.getTime();

Ponieważ obiekty start i end przekazywane do funkcji nie są obiektami daty i wywołania .getTime() na nich skończy się w ' Undefined nie jest błędem funkcji.

I to wszystko! Poprawki te sprawiły, że działa to dla mnie.

 8
Author: Belgor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 09:33:18

To pole ID obiektu event określa powtarzalność tego zdarzenia. Użyj tego samego identyfikatora dla wszystkich powtarzających się Wydarzeń w danym dniu tygodnia.

 1
Author: ganeshk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-17 15:59:41

Najlepszym sposobem rozwiązania powtarzającego się zdarzenia jest skonfigurowanie wywołania JSON do Twojego języka backend (używam Django / Python).

Więc w opcjach kalendarza miałbym:

Events: {url: '/ event-data', cache: false},

Następnie w moim backendzie korzystam z parametrów, które są wysyłane dla bieżącego wyświetlanego kalendarza zmienne "start" I " end " URL pobierają. Tj.:

Hxxp: / / example. com: 8000 / event-data? start=2014-09-28&end=2014-11-09 & _=1413553318353

Żądanie Get zostanie wysłane z opcji events, następnie buduję zdarzenia z bazy danych / pliku źródłowego, który zawiera listę powtarzających się zdarzeń wraz ze zwykłymi zdarzeniami kalendarza i odsyłam tylko listę zdarzeń występujących w tym zakresie dat na liście JSON.

 1
Author: warath-coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-10 08:58:10