Création d'un planning

Création d'un planning - PHP - Programmation

Marsh Posté le 26-09-2012 à 17:09:49    

Bonjour,
 
Je dois créer un planning qui affiche des évènements toutes les semaines. Les évènements seront ajoutés via une interface admin et donc stockés dans une base Mysql.
 
L'idée c'est d'avoir un tableau avec les jours de la semaine et les heures, chaque case représentant 30min. Et lorsqu'un évènement est prévu la case sera remplie d'une couleur.
 
La question que je me pose, c'est comment je code l'affichage du planning (table ?, div ?) ? Comment je structure ma table ?
 
J'amerai bien avoir vos avis avant de me lancer dans une usine à gaz.
 
Merci

Reply

Marsh Posté le 26-09-2012 à 17:09:49   

Reply

Marsh Posté le 26-09-2012 à 17:59:01    

En div... avec du jambon si possible.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 27-09-2012 à 10:59:31    

Pour chaque événement, faut avoir l'ID, le nom, une description, une date et heure de début, une date et heure de fin. Eventuellement d'autres attributs suivant le type d'événement (par ex : sa catégorie ou type, sa criticité, s'il faut un reminder x minutes ou heures avant...).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-09-2012 à 11:49:17    

Pour la table je pense faire ça : evenement(id, titre, date, heure_debut, heure_fin, description)
 
Par contre c'est plus l'affichage qui me gêne, je sais pas comment m'y prendre pour afficher les évènements sous forme de planning.
 

Reply

Marsh Posté le 27-09-2012 à 14:13:03    

Non, fat aussi une date de fin au cas où l'événement soit sur plusieurs jours ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-10-2012 à 15:38:02    

Tu as raison, en fait j'ai dégagé le champs date et dans mes heure_debut et heure_fin c'est des timestamp ;)

 

Bon par contre, je sèche sur l'affichage. J'ai fait une requête par jour de la semaine mais maintenant je sais pas comment faire ma boucle.

 

Par exemple j'ai un évènement de 11h à 12h et un autre de 15h à 18h, je vois pas comment faire pour afficher du vide sur les plages horaires non occupées...

 

Des idées ?


Message édité par egege le 01-10-2012 à 15:38:53
Reply

Marsh Posté le 01-10-2012 à 16:03:17    

Tu sélectionnes tes événements sur une plage de dates (1 jour ou plusieurs), que tu ordonnes par la date de début puis de fin.
 
Tu parcours les enregistrements trouvés et tu les affiches sur les créneaux de ton planning. Après, ça dépend aussi de comment t'as implémenté le calendrier...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-10-2012 à 16:20:58    

En fait je pense avoir trouvé, je sais pas si c'est le plus simple mais bon.
 
L'idée c'est de laisser un espace entre les évènements, espace que je calcule à partir des timestamp...
 

Code :
  1. <div id="lundi" style="float:left;  background:#cdcdcd; height:600px;">
  2. <?php
  3. $time= $timelundimatin;
  4. foreach($lundi as $data) {
  5.     $timedebut= $data['date_debut'];
  6.     $timefin= $data['date_fin'];
  7.     
  8.     $dureeeventprecedent=$timedebut-$time;
  9.     $cases=$dureeeventprecedent/60;
  10.     $height=$cases;
  11.     ?>
  12.     <div style="height:<?php echo $height; ?>px; width:120px;"></div>
  13.     <?php
  14.     $dureeevent=$timefin-$timedebut;
  15.     $cases=$dureeevent/60;
  16.     $height=$cases;
  17.     ?>
  18.     <div style="height:<?php echo $height; ?>px; width:120px; background:red; color: blue;"><?php echo $data['titre']; ?></div>
  19.     <?php
  20.     $time=$timefin;
  21.     }
  22. ?>
  23. </div>


 
Tu vois un truc qui cloche avec cette méthode ?

Reply

Marsh Posté le 01-10-2012 à 22:59:25    

tu sais quoi ? dans un script ... c'est mieux si tu commentes les étapes afin que quand tu relis .... tout soit très clair ^^
 
exemple :
/* calcul de la durée de l'évenement */
......
......
 
/* boucle recherche des evenements du "lundi ou.."mardi ...  */
 
explique par exemple la necessité de la variable $height voire .... dela variable $cases ^^
explique pourquoi $time ? a quoi sert-elle ?
 
enfin je dirais....
 
j'aurais bien vu une vue(mysql par exemple) pour chaque jour de la semaine avec le evenements et sortir le tout via json sur un tableau type jquery .... ça aurait fait pas mal ça ? avec option de recherche, de tri, de sorti pdf etc....
 
edit ... si tu nous disais comment tu entres les données (via formulaire avec choix de la date, de l'heure ou autre ....)
re edit : pense au css pour les div ^^ si tu veux utiliser ce systeme bien sur ....
 
++ spyker


Message édité par spyke_ultimate le 01-10-2012 à 23:09:18
Reply

Marsh Posté le 02-10-2012 à 10:17:59    

Oui, je sais, la c'est juste un brouillon, une piste de réflexion. Je commente toujours mes codes définitifs ;) Le CSS aussi sera à part.
 
Dans ma logique, je défini le timestamp du lundi matin à partir de la date du jour(partie non visible ici).
Ensuite je calcul la durée entre le lundi matin et le premier évènement. J'en fait une div qui a une hauteur variable.
Ensuite je calcul la durée de l’évènement pour calculer la hauteur de la div de l’évènement.
Et je termine ma boucle en donnant à la variable $time, le timestamp de la fin de l’évènement qui servira à calculer la durée avant l’évènement suivant.
 
Pour les données elles seront entrées via un formulaire, mais c'est pas trop important, je cherche surtout la meilleure méthode d'affichage des données.

Reply

Marsh Posté le 02-10-2012 à 10:17:59   

Reply

Marsh Posté le 02-10-2012 à 13:02:08    

dac ^^ j'ai tout comprendu ^^
 
dans ce cas... tu peux utiliser aussi bien les div en direct que les tr ou td à l'interieur parce que là... tout va s'afficher à la suite non ?

Reply

Marsh Posté le 02-10-2012 à 14:23:50    

Moi, j'aurais fait un tableau avec une ligne par créneau de la plus petite unité de temps à laquelle on peut faire démarrer ou terminer un événement (1h, 1/2h, 1/4h...) et en colonne, les jours.
 
Pour afficher les événements, j'aurais fait des rowspan sur les td.
 
Question : peut-il y avoir plusieurs événements sur un même créneau horaire oou des chevauchements d'événements? Parce si c'est le ca,s là, ça va compliquer l'affichage :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-10-2012 à 14:35:20    

Y'a t-il un intérêt particulier à utiliser un tableau ? C'est la question que je me suis posé dès le départ... Tu en dis quoi ?
 
Par contre, en effet, ca ne gère pas les évènements simultanés, mais à priori il n'y en a pas besoin...

Reply

Marsh Posté le 02-10-2012 à 15:55:02    

Ben à la base, un calendrier, c'est un tableau. Cette mise en forme (table, tr, td...) me paraît plus approprié tant sur l'aspect visuel que sémantique.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-10-2012 à 17:17:22    

Ouais t'as peut être pas tord, et puis ca semble plus simple si un jour je dois gérer les évènements simultanés... :)

Reply

Marsh Posté le 02-10-2012 à 17:25:17    

table
c'est pas la peine de te compliquer la vie, il y a deja des viz pour ca,  
http://arshaw.com/fullcalendar/
 


---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Marsh Posté le 02-10-2012 à 17:49:22    

Intéressant cette lib. :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-10-2012 à 18:20:33    

Carrément, mais c'est lié à un agenda Google... Dommage...
 
Ceci dit, c'est peut être une solution de partir sur un code existant. Je vais chercher un peu de ce coté la aussi. ;)

Reply

Marsh Posté le 02-10-2012 à 18:51:44    

il y a un exemple avec le format json google mais tu peux l'adapter avec ton format.


---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Marsh Posté le 02-10-2012 à 19:15:23    

Ouais mais je suis pas du tout à l'aise avec tout ça. Je vais passer plus de temps à adapter qu'à partir de zéro ou d'un autre script.  [:poooop]  

Reply

Marsh Posté le 02-10-2012 à 20:03:29    

certes certes ... mais on peut progresser en utilisant des variantes tu sais ? j'ai utilisé json régulièrement avec des tableaux et... une fois que l'on a compris le principe .... c'est assez facile. tu connais un peu javascript ?

Reply

Marsh Posté le 02-10-2012 à 23:54:48    

Oui c'est sûr. De toute façon c'est toujours bien d'apprendre. Je suis pas vraiment très à l'aise avec javascript bien que j'utilise régulièrement la lib jquery.

 

Tu as un tuto à me conseiller sur json ?

Reply

Marsh Posté le 03-10-2012 à 00:24:28    

json c'est tout simplement un format de données type tableau "préconfiguré" .... genre architecture xml. facile donc a remplir avec php (genre j'alimente le tableau avec mes données mysql)
 
je renvoie json et je demande à un interpreteur de s'en arranger (javascript, php, ....) je t'ai parlé de ça parce que jquery utilise ce genre de chose pour la fabrication de tableau en tout genre et que.... tu devrais surement trouver un model qui te convienne ^^


Message édité par spyke_ultimate le 03-10-2012 à 00:24:46
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed