6 votes

Meilleur moyen de développer/gérer/concevoir des tâches récurrentes/calendrier

Un exemple de ce dont je parle est similaire à Google Calendar. Quand une nouvelle tâche récurrente est créée.

Après avoir créé la tâche récurrente "modèle" - sur laquelle toutes les tâches individuelles sont basées, créez-vous toutes les tâches individuelles et les stockez dans la base de données ? ou stockez-vous seulement les événements récurrents "modèle" et leurs exceptions ?

Si l'utilisateur demande une vue "mois" et que vous voulez afficher tous les événements/tâches, il semble que la création de la sortie en temps réel à partir du modèle et l'inclusion de toutes les exceptions nécessiteraient beaucoup plus de ressources que si chaque tâche récurrente individuelle était créée à partir du modèle et insérée dans la base de données.

Cela faciliterait également la recherche, le tri, etc.

Quelqu'un a déjà créé quelque chose comme ça ? Des idées ?

4voto

tpow Points 2245

Stockez tout cela dans la base de données.

Vous voulez avoir une table "Modèle de tâche" et une table "Tâche" où il y a une relation un->many.

Lorsque l'utilisateur indique qu'il souhaite qu'une tâche se répète, créez un enregistrement de "modèle de tâche", puis créez autant de "tâches" que l'utilisateur a indiqué (ne permettez pas à un utilisateur de créer des tâches trop longtemps à l'avance). Chaque tâche est liée au modèle de tâche par une clé étrangère. L'idée est que SQL sera plus efficace pour gérer ces enregistrements que d'essayer de faire tout cela en code sur la base d'un modèle. De cette façon, vous aurez plus d'options lorsque vous trierez et filtrerez vos données. Après tout, il est plus facile d'écrire une requête SQL que d'écrire, de tester et de maintenir une fonction PHP qui manipule les données.

Voici d'autres conseils que je vous donnerais :

  • Essayez d'obtenir beaucoup d'informations dans votre enregistrement "Modèle de tâche". Gardez le nombre de tâches que le modèle couvre, la date de fin de la dernière tâche, le temps écoulé entre la première et la dernière tâche, etc. Ces "métadonnées" peuvent vous faire gagner du temps lorsque vous cherchez à trier et à filtrer les tâches.
  • Mettez un index sur le champ Date et FK, cela améliorera également le temps de recherche.
  • Je viens de créer deux applications de calendrier au travail qui ont été plutôt bien accueillies par les patrons. J'ai utilisé le plugin JQuery "FullCalendar" (http://arshaw.com/fullcalendar/). J'ai utilisé JQuery AJAX pour gérer la plupart de mes événements, et il avait un support intégré pour l'affichage du mois, du jour et de la semaine.

2voto

Till Points 14673

Pour les événements récurrents, j'ai fait ce qui suit il y a quelque temps :

  1. Lorsqu'un utilisateur saisissait un événement, je stockais la date de l'événement selon le modèle de date GNU - le mot clé pour PHP est formats de date relatifs .

  2. Puis j'ai commencé par créer des événements pour, par exemple, l'année suivante. Et j'ai créé des enregistrements réels où j'ai converti la date relative en une date réelle -- par exemple "chaque premier lundi" en "mm-dd-YYYY". Cela m'a permis de les afficher et aussi de permettre à l'utilisateur de déplacer un seul événement ou d'en annuler un, etc.

  3. Il faut ensuite déterminer jusqu'où aller dans le futur - mon idée était de créer des événements lorsque les pages actuelles étaient parcourues. Par exemple, si j'avais créé des événements jusqu'en juin 2011 et que quelqu'un sautait jusqu'en juillet 2011, j'itérerais sur mes événements et les configurerais de manière transparente.

  4. Lorsque l'utilisateur modifie le modèle relatif, proposez-lui de mettre à jour tous les événements suivants -- à moins qu'il n'ait déjà un modèle personnalisé. Les modèles relatifs permettent de calculer tout cela très facilement.

1voto

zerodin Points 560

J'ai rencontré le même problème il y a quelque temps et, au lieu de réinventer la roue, j'ai utilisé les API de Google Calendar. (http://code.google.com/apis/calendar/data/2.0/developers\_guide.html)

Vous créez un compte Google et accédez aux informations de l'agenda. Il existe des API pour créer/modifier/supprimer une entrée récurrente. Vous pouvez également spécifier une date et une heure et rechercher les événements correspondants.

Lorsque vous créez un événement sur Google Agenda, vous recevez un jeton/identifiant que vous pouvez stocker dans votre propre base de données et référencer dans le contexte de l'application.

0voto

Harmen Points 11632

Si l'utilisateur demande une vue "mois" et que vous voulez afficher tous les événements/tâches, il semble que la création de la sortie en temps réel à partir du modèle et l'inclusion de toutes les exceptions nécessiteraient beaucoup plus de ressources que si chaque tâche récurrente individuelle était créée à partir du modèle et insérée dans la base de données.

Je ne suis pas d'accord sur ce point. Et si une tâche se répétait tous les samedis pendant les 7 prochaines années... Et s'il y avait beaucoup de ces tâches répétitives ? Cela vous ferait perdre beaucoup d'espace. C'est pourquoi je pense qu'il est préférable de sauvegarder une tâche récurrente sous la forme d'un seul enregistrement + un enregistrement pour chaque exception (puisqu'il y a moins d'exceptions que de récurrences).

Le seul problème qui reste est de savoir comment mettre en place une requête pour sélectionner chaque tâche (j'y pense encore).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X