Journal du Net > Développeur > PHP >  PHP > Pratique > Créer un calendrier en PHP
Pratique
 
10/10/2007

Créer un calendrier en PHP

Présentation d'un petit script PHP permettant de générer un calendrier et de le mettre en forme dans une page Web. De la gestion des chaînes à l'exploitation d'une feuille de style CSS.
  Envoyer Imprimer  

 
En savoir plus
 
 
 

Nous présentons ici un petit scipt inspiré de mEga (mEga-Box) qui permet de générer un calendrier en PHP et le mettre en page en CSS.

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?201208241130"intertitre">Présentation

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>&raquo; " . 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>&nbsp;</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>&nbsp;</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"));

Ensuite, une feuille de style CSS peut être aisément appliquée en vue de la mise en forme dans la page Web.

calendrier.css?201208241130"css">#calendrier li{ list-style: none; } #libelle { width: 210px; margin: 0 auto; padding: 0; } .ligne { width: 210px; margin: 0 auto; padding: 0; } #libelle li { float : left; width : 30px; } .ligne li { color: #000; float : left; width : 30px; } .ligne li a:hover{ list-style: none; text-decoration: none; } li.itemCurrentItem { /* A vous de configurer l'apparence de la date du jour */ } li.itemSelectedItem { /* A vous de configurer l'apparence du jour sélectionné */ }

Contenu proposé sous licence Creativ Commons par Thanh Nguyen


JDN Développeur Envoyer Imprimer Haut de page

Sondage

Adobe parviendra-t-il à percer avec sa nouvelle suite de création Web Edge ?

Tous les sondages