mEga (mEga-Box), m’a inspiré pour ce petit billet dans lequel je vous propose un petit script pour générer un calendrier en PHP et le mettre en page en CSS.
Présentation
Dans mon exemple j’ai séparé le code en un fichier index principal et trois fichiers à inclure (string.inc.php, calendrier.inc, calendrier.css). Le calendrier généré ne contient pas de tableau mais une liste d’éléments.
string.inc.php contient des fonctions de gestion de chaines:
// fonctions utiles, $valeur représente une date au format AAAA-MM-JJ function getSecond($valeur) { return substr($valeur, 17, 2); } function getMinute($valeur) { return substr($valeur, 14, 2); } function getHour($valeur) { return substr($valeur, 11, 2); } function getDay($valeur) { return substr($valeur, 8, 2); } function getMonth($valeur) { return substr($valeur, 5, 2); } function getYear($valeur) { return substr($valeur, 0, 4); } function monthNumToName($mois) { $tableau = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aôut", "Septembre", "Octobre", "Novembre", "Décembre"); return (intval($mois) > 0 && intval($mois) < 13) ? $tableau[intval($mois)] : "Indéfini"; } |
calendrier.inc.php, contient le script générant le calendrier:
// Fonction pour afficher le calendrier function showCalendar($periode) { $leCalendrier = ""; // Tableau des valeurs possibles pour un numéro de jour dans la semaine $tableau = Array("0", "1", "2", "3", "4", "5", "6", "0"); $nb_jour = Date("t", mktime(0, 0, 0, getMonth($periode), 1, getYear($periode))); $pas = 0; $indexe = 1; // Affichage du mois et de l'année $leCalendrier .= "\n\t<h2>» " . monthNumToName(getMonth($periode)) . " " . getYear($periode) . "</h2>"; // Affichage des entêtes $leCalendrier .= " <ul id=\"libelle\"> \t<li>L</li> \t<li>M</li> \t<li>M</li> \t<li>J</li> \t<li>V</li> \t<li>S</li> \t<li>D</li> </ul>"; // Tant que l'on n'a pas affecté tous les jours du mois traité while ($pas < $nb_jour) { if ($indexe == 1) $leCalendrier .= "\n\t<ul class=\"ligne\">"; // Si le jour calendrier == jour de la semaine en cours if (Date("w", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == $tableau[$indexe]) { // Si jour calendrier == aujourd'hui $afficheJour = Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))); if (Date("Y-m-d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == Date("Y-m-d")) { $class = " class=\"itemCurrentItem\""; } else { // 1 est toujours vrai => on affiche un lien à chaque fois // A vous de faire les tests nécessaire si vous gérer un agenda par exemple if (1) { $class = " class=\"itemExistingItem\""; $afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>"; } else { $class = ""; } } // Ajout de la case avec la date $leCalendrier .= "\n\t\t<li$class>$afficheJour</li>"; $pas++; } // else { // Ajout d'une case vide $leCalendrier .= "\n\t\t<li> </li>"; } if ($indexe == 7 && $pas < $nb_jour) { $leCalendrier .= "\n\t</ul>"; $indexe = 1;} else {$indexe++;} } // Ajustement du tableau for ($i = $indexe; $i <= 7; $i++) { $leCalendrier .= "\n\t\t<li> </li>"; } $leCalendrier .= "\n\t</ul>\n"; // Retour de la chaine contenant le Calendrier return $leCalendrier; } |
Utilisation
Il suffit d’appeler la fonction showCalendar() en passant en paramètre le mois et l’année sous la forme YYYY-MM.
Pour le mois en cours:
echo showCalendar(date("Y-m")); |




















Salut Solo, c’est sympa ton calendrier, je vais voir si je l’inclus dans mon site, en tout cas ça me plaît bien, même si j’ai un peu de mal à le configurer (je suis un novice…). La gestion des dates visitées, c’est à partie de BDD? Moi, en tout cas je suis plongé dans le php, je ne sais pas si je réussirai un jour à écrire de vrais scripts (pour l’instant, j’en suis plus à en prendre par ci par là et à comprendre comment ça marche qu’autre chose…). En tout cas, merci à tous les webmasters comme toi pour essayer de nous aider, nous, les débutants, ça serait moins facile sans vous.
Bonjour Olivier, ce script ne sert effectivement qu’à afficher un calendrier. Si tu veux lui ajouter des fonctionnalités tu devras passer par une base de données MySQL par ex.
Bon courage dans ton apprentissage et n’hésites pas si tu as des soucis : http://dream.media-box.net
Bonjour solo, c’est encore moi Olivier Cartagena. Excuses-moi de t’embêter, en fait je sais pas s’il faut que je poste sur le forum ou ici, c’est au sujet du calendrier. Les dates sont affichées comme liens, est ce possible de les afficher sans links? En effet, j’ai pas encore mis de fonctionnalités dessus (pour l’instant j’en suis incapable…) et si sur firefox et opera, quand on clique sur une des dates, la navigateur se charge de raffraichir la page, sur IE, ça m’envoie sur la page d’index… donc pas terrible comme effet et pour la navigation… j’espère mettre mon site en ligne dans très peu de temps, j’ai mis un lien sur ton site
Tu peux me joindre par mail si tu veux.
Envois moi le script dans l’état dans lequel tu l’utilises et je te le modifierai
Salut solo… c’est quoi ton mail, je le trouve nulle part sur ton site?… j’ai mis mon site en ligne, y a pas mal de trucs à faire encore, c’est normal mais j’en suis content…
Pourras tu y jeter un coup d’oeil un jour où tu en auras le temps, ça me ferait très plaisir d’avoir ton avis, quel qu’il soit… http://www.pukanina.com
Olivier
Salut Olivier,
jvais te contacter via le mail de ton site
Merci [b]beaucoup[/b] pour ce billet solo. Sache que tu n’aura pas aidé qu’Olivier.
Je recherche ce genre de calendrier depuis un bout de temps mais à part des vieux exemples en javascript auquels je ne comprenais vraiment rien, c’était pas vraiment la joie…
Merci encore.
Pile ce que je cherchais : un calendrier léger, simple à mettre en place, avec CSS externe et gestion des noms de mois (donc on peut l’enrichir d’autres langues).
Bref : la base !
Bravo! Simple, facile à comprendre, à modifier et très fonctionnel!
Salut Solo,
Tout d’abord, merci pour ton calendrier que j’aimerais intégrer sur mon site. Cependant, comme je suis encore débutant:(, je n’arrive pas à l’adapter aux besoins de mon site. Peut-être que tu pourrais me donner un coup de main???
En fait, j’aimerais avoir la possibilité de passer d’un mois à l’autre via un formulaire comme tu le fais dans la ta page : http://www.sutekidane.net/labo/php/calendrier/index.php. Le problème c’est que je n’arrive pas à avoir le « vrai » code source de cette page.
Et en plus, j’aimerais qu’il n’y ait pas de lien sur les dates antérieures à la date du jour.
Est-ce possible? Si oui, peux-tu me donner de l’aide?
Encore merci car sans des gens comme toi, les débutants resteraient débutants.
A bientot j’espère
bonjour
comme tu le dis j’ai inclus les 2 fichiers PHP et la feuille CSS par un link …. mais il y a des messages d’errur qui s’afichent : Warning: main(calendrier.inc): failed to open stream: No such file or directory in c:\documents and settings\antoine.portable\mes documents\test php\calendrier.php on line 3
Warning: main(): Failed opening ‘calendrier.inc’ for inclusion (include_path=’.;C:/Program Files/EasyPHP1-8\php\pear\’) in c:\documents and settings\antoine.portable\mes documents\test php\calendrier.php on line 3
ainsi que le contenu du premier fichier qui s’affiche
merci encore pour ce code qui est super
Salut
j’ai réalisé un agenda perso online complet en php, si vous voulez voir ce que ca donne c’est ici: http://www.yemen.sup.fr
Bonjour,
Tout d’abord, merci de partager ton savoir.
Je suis vraiment débutant, mais j’ai pu faire fonctionner ton calendrier. J’ai néanmoins dû rajouter ‘list-style: none;’ sur #libelle li et .ligne li.
J’aurais une question à te poser:
En glissant le pointeur de la souris sur une journée du calendrier, comment puis-je récupérer la valeur du jour concerné dans une variable ?
Merci d’avance,
Bonjour Pierre,
je te conseille de poser ta question sur http://dream.media-box.net ou http://forum.alsacreations.com
On se fera un plaisir de répondre à ta question
Bonjour c’est exactement ce que je cherchais un calendrier tout modifiable lol. Mais euh… Quelquun pourrait maider pour linclure dans mon site svp? jai de gros pb avec le php
Bonjour à tous,
ben oui encore un novice qui aimerais utiliser ce Script… ::lol j’aimerais utiliser ceci dans mon site également, problème c’est que le code s’affiche et non le calendrier c’est marrant mais je ne vois pas ce que j’ai raté
. est il possible de me transférer ou de m’expliquer un chti peu?
merci beaucoup!
Il faut que le code soit compris entre « < ?php" et "?> » pour qu’il soit interprété comme du PHP (sans les guillemets). Sinon c’est envoyé au client directement, comme du HTML statique.
euh… ouaip bien bien sympa ce ptit script, enfin j’ai surtout regarder la démo, est c pile poil sk’il me faut, chuis en train de mettre en place un blog perso, simili dot clear en terme de présentation, mais complètement codé par moi, et j’avoue, j’ai pas trop envie d’avoir a me faire chier a coder le calendrier…
donc ce sript m’as l’air bien…
Si, je ne sais pas si le bug est connu… mon site meurt avant 2038 car a partir de janvier 2038 le script bug…. c louche, j’ai pas vraiment essxayer de voir si je trouvais une solution, mais si vous pouviez m’en dire un peu plus, je me met un ptit signé sur cette page, si l’auteur, pouvais me contacter par mail pour m’en dire un peu plus long ??
ce serais très très sympa
Merci pour ce tit script, je vient de l’intégrer sur mon Blog,
L’utilisation de list est vraiment optimale pour la validation W3C
c super!!
petit commentaire… j’ai ajouté une limitation sur la date…
SI année supérieur à 2037 alors on n’affiche pas le bouton pour aller a une date supérieur… ca evite le bug car date() en php ne va pas plus loin que le 19/01/2038 voila voila :p
mais merci bcp!!
Limité à 2038 ?
Serait ce une prémonition :p
ça marche pas !:|
mais, si, ca marche très bien
pour l’histoire de date, c’est la fonction php Date() qui se termine en 2038…. Youpi
Salut!
J’ai essayé de reprendre ton script car il me paraissait très intéressant mais impossible d’afficher quoi que ce soit.
Je dois m’être trompé en incluant les différents fichiers mais pourtant je ne vois pas où…
Pourrais-tu être un peu plus précis concernant cette inclusion stp?
Merci beaucoup
je dois developer un calendrier en php avec possibilité d’éffectuer des réservations avec le jou en cour surligné quand on clique sur une lien ne page s’ouvre etl’on peut sélectionner les horraires de réservation, il faut que la personne entre sont nom rénomemail numéro de tel.
pourriez vous m’aidez.
Cordialement
Je pense que le script est relativement bien fait… et l’optimisation du truc n’est pas franchement compliquée….
a toi de jouer
salut,
joli boulot, simple et efficace !
par contre l’exemple et la CSS ne sont plus en ligne…
-:o(
Hey ! Super script ! C’est très bien et sa me convient, la plupart des calendrier que l’on peut trouver sur internet son déjà personnalisé ou ne fonctionne pas. Celui-ci est génial ! On peut tout personnaliser, on peut amélioré le script sans se fatiguer à corrigé les erreurs vu qu’il n’y en a pas ! =D
Merci beaucoup, ce script m’aide énormément !