Съхранявайте всичко в базата данни.
Искате да имате таблица „Шаблон на задача“ и таблица „Задача“, където има връзка едно->много.
Когато потребителят посочи, че иска задачата да се появи отново, създайте запис „Шаблон на задача“ и след това създайте толкова „Задачи“, колкото е посочил потребителят (не позволявайте на потребителя да създава задачи твърде далеч в бъдещето). Всяка задача е свързана с шаблона на задача чрез външен ключ. Идеята е, че SQL ще бъде по-ефективен при управлението на тези записи, отколкото да се опитва да направи всичко това в код, базиран на един шаблон. По този начин ще имате повече възможности, когато сортирате и филтрирате данните си. В крайна сметка, писането на SQL заявка е по-лесно от писането, тестването и поддържането на PHP функция, която манипулира данните.
Някои други съвети, които бих ви дал, са:
- Опитайте се да получите много информация във вашия запис „Шаблон на задача“. Запазете броя на задачите, които шаблонът покрива, датата, на която последната задача приключва, времето, изминало между първата и последната задача и т.н.. Тези „Мета данни“ могат да ви помогнат да спестите време за заявки, когато искате да сортирате и филтрирате задачи.
- Поставете индекс в полето Дата и FK, това ще помогне и за времето на заявка.
- Току-що създадох две приложения за календар на работа, които бяха доста добре приети от шефовете. Използвах JQuery плъгина "FullCalendar" (http://arshaw.com/fullcalendar/). Използвах JQuery AJAX за обработка на повечето от моите събития и беше вградена поддръжка за изглед за месец, ден и седмица.