[PHP] Simple Calendrier mensuel
24 octobre 2008 à 20:41, par ChristopheBonsoir !
Voilà quelque chose de bien interressant, le code est assez simple à comprendre, mais… j’avoue pas très facile, servez-vous de ça !
Voilà l’aperçu en image :

(Cliquez sur l’image pour voir le calendrier marcher en réel !)
Ce calendrier est doté de deux langues : Français et Anglais !
Attention ! Il ne marche Exclusivement sous PHP5 !
Bon, maintenant, voilà le code complet est fonctionnel (sous PHP5 hein ^^) :
Voir le Code PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Calendrier</title> <style type="text/css"> .calendar tr, td { border:#4A4A4A 1px solid; text-align:center; } .calendar td { width:25px; } .calendar a img { border:0px; } .calendar .caption,.navigation a:link,a:visited { font-weight:bold; } .calendar .caption { border-left:0px; border-right:0px; } .calendar .head .border_right { border-right:0px; } .calendar .head .border_left { border-left:0px; } .caption { text-align:center; } .calendar .navigation a:link,a:visited { color:#333333; } .calendar .head { background-color:#E1E1E1; } .calendar .days_list { background-color:#EEEEEE; } .calendar .days { background-color:#F9F9F9; } </style> </head> <body> <?php // french ; english $language_selection = 'french'; ### French $calendar_txt['french']['mois'] = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'); $calendar_txt['french']['jours'] = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'); $calendar_txt['french']['voc'] = array('Année précédente', 'Mois précédent', 'Mois suivant', 'Année suivante'); ### English $calendar_txt['english']['mois'] = array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December'); $calendar_txt['english']['jours'] = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'); $calendar_txt['english']['voc'] = array('Last year', 'Last month', 'Next month', 'Next year'); // Récupére la date par GET ou date courante $jourActuel = (int)( $_GET['jour'] ? $_GET['jour'] : date('d') ); $jourActuel = (int)( $jourActuel < 1902 ? date('d') : $jourActuel ); $jourActuel = (int)( $jourActuel > 2036 ? date('d') : $jourActuel ); $moisActuel = (int)( $_GET['mois'] ? $_GET['mois'] : date('m') ); $anneeActuelle = (int)( $_GET['annee'] ? $_GET['annee'] : date('Y') ); $nomMoisActuel = $calendar_txt[$language_selection]['mois'][$moisActuel]; $dateActuelle = strtotime( sprintf('%s-%s-%s', $anneeActuelle, $moisActuel, $jourActuel) ); // Récupére le nombre de jours dans le mois $nbJoursMois = date('t', $dateActuelle); // Menu de navigation annee/mois $nextAnnee = date('Y', strtotime('+1 year', $dateActuelle) ); // Année suivante $prevAnnee = date('Y', strtotime('-1 year', $dateActuelle) ); // Année précédente $nextMois = date('m', strtotime('+1 month', $dateActuelle) ); // Mois suivant $prevMois = date('m', strtotime('-1 month', $dateActuelle) ); // Mois précédent // Affichage $numJourSemaine = 1; $jour = 1; $base_jours = $calendar_txt[$language_selection]['jours']; $base_mois = $calendar_txt[$language_selection]['mois']; $base_voc = $calendar_txt[$language_selection]['voc']; // Génération du tableau echo '<table class="calendar" cellpadding="3" cellspacing="0"> <tr class="head"><td colspan="1" class="navigation border_right"> <a href="?annee='.$prevAnnee.'&mois='.$moisActuel.'" title="'.$base_voc[0].'"><img src="./images/last_year.png" alt="<<"></a><br /> <a href="?annee='.$anneeActuelle.'&mois='.$prevMois.'" title="'.$base_voc[1].'"><img src="./images/last_month.png" alt="<"></a></td> <td colspan="5" class="caption">'.$nomMoisActuel.' '.$anneeActuelle.'</td> <td colspan="1" class="navigation border_left"> <a href="?annee='.$nextAnnee.'&mois='.$moisActuel.'" title="'.$base_voc[3].'"><img src="./images/next_year.png" alt=">>"></a><br /> <a href="?annee='.$anneeActuelle.'&mois='.$nextMois.'" title="'.$base_voc[2].'"><img src="./images/next_month.png" alt=">"></a> </td></tr> <tr class="days_list"><td title="'.$base_jours[0].'">'.$base_jours[0][0].'</td><td title="'.$base_jours[1].'">'.$base_jours[1][0].'</td><td title="'.$base_jours[2].'">'.$base_jours[2][0].'</td><td title="'.$base_jours[3].'">'.$base_jours[3][0].'</td><td title="'.$base_jours[4].'">'.$base_jours[4][0].'</td><td title="'.$base_jours[5].'">'.$base_jours[5][0].'</td><td title="'.$base_jours[6].'">'.$base_jours[6][0].'</td></tr><tr class="days">'; // Affichage des jours while( $jour <= $nbJoursMois ){ // Date du jour traité $dateTraitee = sprintf("%d-%d-%d", $anneeActuelle, $moisActuel, $jour); $numJourSemaineDateTraitee = (int)date("N", strtotime($dateTraitee) ); // Afficher le jour à son emplacement par rapport au jour de la semaine if( $numJourSemaineDateTraitee == $numJourSemaine ){ // Couleur de fond du jour actuel if( $jour == $jourActuel && $moisActuel == date('m') && $anneeActuelle == date('Y') ){ $couleurFond = ' background-color:yellow; font-weight:bold;'; } else { $couleurFond = ''; } if( $language_selection == 'french' ){ $complete_date = $base_jours[$numJourSemaineDateTraitee-1].' '.$jour.' '.$base_mois[$moisActuel].' '.$anneeActuelle; } elseif( $language_selection == 'english' ){ $complete_date = $base_jours[$numJourSemaineDateTraitee-1].', '.$base_mois[$moisActuel].' '.$jour.date('S', $jour).' '.$anneeActuelle; } else { $complete_date = $base_jours[$numJourSemaineDateTraitee-1].' '.$jour.' '.$base_mois[$moisActuel].' '.$anneeActuelle; } // Afficher le jour à son empalcement echo '<td style="'.$couleurFond.'" onclick="alert(\''.$complete_date.'\')" title="'.$complete_date.'">'.$jour.'</td>'; $jour++; // Passer au jour suivant du mois } else { echo '<td> </td>'; // Emplacement vide } // Passer au jour suivant de la semaine $numJourSemaine++; if ( $numJourSemaine > 7 ) { // Au-delà de Dimanche echo '</tr><tr class="days">'; $numJourSemaine = 1; // Retour au Lundi } } // Complession des dernières cellules $fin_tableau = 7-($numJourSemaine-1); if($fin_tableau < 7) for($i=1;$i<=$fin_tableau;$i++) echo '<td> </td>'; echo '</tr></table>'; ?> </body> </html> |
Attention, il y a des images (4) :

Et voilà !
Amusez-vous bien !