Przechowuj to wszystko w bazie danych.
Chcesz mieć tabelę „Szablon zadania” i tabelę „Zadanie”, w których istnieje relacja jeden->wiele.
Gdy użytkownik wskaże, że chce, aby zadanie się powtórzyło, utwórz rekord „Szablon zadania”, a następnie utwórz tyle „Zadań”, ile wskazał użytkownik (nie zezwalaj użytkownikowi na tworzenie zadań w zbyt odległej przyszłości). Każde zadanie jest połączone z szablonem zadania za pomocą klucza obcego. Pomysł polega na tym, że SQL będzie bardziej wydajny w zarządzaniu tymi rekordami niż próba zrobienia tego wszystkiego w kodzie opartym na jednym szablonie. W ten sposób będziesz mieć więcej opcji podczas sortowania i filtrowania danych. W końcu pisanie zapytania SQL jest łatwiejsze niż pisanie, testowanie i utrzymywanie funkcji PHP, która manipuluje danymi.
Kilka innych wskazówek, które chciałbym ci dać, to:
- Spróbuj uzyskać dużo informacji w rekordzie „Szablon zadania”. Zachowaj liczbę zadań objętych szablonem, datę zakończenia ostatniego zadania, czas, jaki upłynął między pierwszym i ostatnim zadaniem, itp. Te „metadane” mogą pomóc zaoszczędzić czas na zapytania, gdy chcesz sortować i filtrować zadania.
- Umieść indeks w polu Data i FK, pomoże to również w zapytaniu.
- Właśnie zbudowałem dwie aplikacje kalendarza w pracy, które zostały całkiem dobrze przyjęte przez szefów. Użyłem wtyczki JQuery „FullCalendar” (http://arshaw.com/fullcalendar/). Użyłem JQuery AJAX do obsługi większości moich zdarzeń i ma wbudowaną obsługę widoku miesiąca, dnia i tygodnia.