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. |
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>» " . 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"));
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
|