Calendrier en 70 lignes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 054 fois - Téléchargée 15 fois

Contenu du snippet

Un calendrier choix libre des années et des mois = jours positionnés ad hoc
Pas de fichier annexe à inclure ni image, tout est compris et commenté !
calendrier intrinsèque repris depuis le source de MANUCHE : pas de fichier inc (sauf peut-être les styles),
retour au format MySQL,
Attention, par souci de légèreté de l'exercice, les entêtes HTML sont a minima
et bien sûr le fichier <a href> est à préciser !
tch.Const.

Source / Exemple :


<?php
$arrMois = array ('',' Janvier ',' Février ',' Mars ',' Avril ',' Mai ',' Juin ',' Juillet ',' Août ',' Septembre ',' Octobre ',' Novembre ',' Décembre ');
$arrJour = array ('Dimanche ','Lundi ','Mardi ','Mercredi ','Jeudi ','Vendredi ','Samedi ');	
	// date par défaut 
	$gt = getdate();		
	$defautJour = $gt['mday']; 		
 	$defautMois = $gt['mon'];  			
	$defautAn =   $gt['year'];   				
	// on remplace éventuellement par les sélections :	
	$nuJour = (isset($_REQUEST['nuJour']))? $_REQUEST['nuJour']: $defautJour ;
	$nuMois = (isset($_REQUEST['nuMois']))? $_REQUEST['nuMois']: $defautMois ;
	$nuAn   = (isset($_REQUEST['nuAn']))?   $_REQUEST['nuAn']  : $defautAn   ;	
	// détails de format :
	$mkt = mktime(0,0,0, $nuMois, 1, $nuAn);
	$nbJours = date('t', $mkt); 		// nb jours du mois  
	$idPremier = date('w', $mkt)  ;		// id jour semaine du premier jour du mois  
	if ($idPremier==0) $idPremier=7 ;	
	$mkt = mktime(0,0,0, $nuMois,$nuJour,$nuAn);
	$idJour = date("w", $mkt);			// id jour semaine du jour courant 	
	// chaines  
	$nomJour= $arrJour[$idJour];	
	$nomMois= $arrMois[$nuMois];
	$mysqlDate= date("Y-m-d H:i:s",$mkt) ; 
?>
<html><head><title>Calendrier</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
	a 		{ color:#FFFFFF; text-decoration:none ;}
	a:hover 	{ color:#000000; font-wheight: bolder;}
	.gras 		{ font-weight:bold }
	.table_cal  	{ font-family:arial ; font-size:12px ; text-align:center ; border-style:solid ; border-witdth:1px; border-color:black; background-color:#669999 ; }
	.td_an_mois	{ border-style:solid ; border-width:1px ; border-color:black; height:18px ; }
	.td_plein 	{ border-style:solid ; border-width:1px ; border-color:black; height:18px ; background-color:#669966 ;}
	.td_vide 	{ border-style:none ; height:18px ; }
</style>
</head>  
<body>
<table class="table_cal">
<!-- ==============  CHOIX ANNEE  ============== -->
<tr>
	<td class="td_an_mois" colspan="7" align="center">   
		<a class="gras" href="cal.php?&nuAn=<?php echo $nuAn-1 ?>&nuMois=<?php echo $nuMois ?>" > <<&nbsp; </a>
		<span class="gras"><?php echo $nuAn ?></span>
		<a class="gras" href="cal.php?&nuAn=<?php echo $nuAn+1 ?>&nuMois=<?php echo $nuMois ?>" > &nbsp;>> </a>
		<input name="nuAn" type="hidden" value="<?php echo $nuAn ?>" />
	</td>
</tr>
<!--  ==============  CHOIX MOIS  ============== -->
<tr>
	<td class="td_an_mois" align="center" colspan="7">
	<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
	<select class='gras' name="nuMois" onChange="submit();" >
	<?php
	for ($m=1; $m<13; $m++) {
		if ( $nuMois == $m ) {
			echo "<option selected='selected' value='$m'>$arrMois[$m]</option>\n" ;
		} else {
			echo "<option value='$m'>$arrMois[$m]</option>\n";
		}
	}
	?>
	</select>
	</form>
	</td>
</tr>
<!-- ==============  CHOIX JOUR  ============== -->
<tr><th>Lun</th><th>Mar</th><th>Mer</th><th>Jeu</th><th>Ven</th><th>Sam</th><th>Dim</th></tr>
	<?php
	$jour=1 ;
	$trouved=FALSE;
	// pour chaque semaine
	for ($s=1 ; $s<=6 ; $s ++){
		echo "<tr>";
		// pour chaque colonne de jour  
		for( $j=1 ; $j<=7 ; $j++){
			if ($jour<= $nbJours) {
				// premier jour du mois ?
				if ( $idPremier>$j && $s==1 && $trouved==FALSE ) {
					echo "<td class='td_vide'></td>";
				} else { 
					$trouved==TRUE;
					echo "<td class='td_plein'><a href='cal.php?&nuAn=$nuAn&nuMois=$nuMois&nuJour=$jour'> $jour </a></td>\n";
					$jour+=1;
				}	
			}		
		}
	echo "</tr>";
	}?>
</tr>
</table>
<?php 		
echo "<p>date sélectionnée = $nomJour $nuJour $nomMois $nuAn</p>" ;
echo "<p>date au format mySQL = $mysqlDate</p>";
?> 
</body>
</html>

Conclusion :


Depuis le source de MANUCHE (janvier 2011), merci...
avec en plus et en moins : les styles ok, l'emploi optimisé de getDate() et de date(), de echo "''" etc
et pas de ces bizarres coefficients !
A retenir : dans tous les cas, le traitement PHP des formulaires doit se positionner AVANT le HTML

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
lundi 12 octobre 2009
Statut
Membre
Dernière intervention
4 mars 2011

Bon code très bien expliqué.
Il serait bien à l'avenir de colorer la date du jour actuel ainsi que les weekends et jours fériés. Enfin c'est une idée à développer. Bonne continuation et merci pour le script !!
Messages postés
2
Date d'inscription
lundi 27 septembre 2004
Statut
Membre
Dernière intervention
26 février 2011

Cher tchconst, tu m'a remotivé.
J'ai modifié mon script initial vers plus de simplification, en essayant de tenir compte des commentaires divers et d'idées contenues dans ton propre script, et en mettant le calendrier sous forme de 'fonction' à inclure dans n'importe quel fichier.

Bonne continuation !!
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
12
bonjour

sympa ton code comme 007Julien -> tant qu'à utiliser un $_SERVER['PHP_SELF']

a++
Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
3
Un détail : tant qu'à utiliser un $_SERVER['PHP_SELF'] pour les mois, pourquoi l'abandonner pour le reste du calendrier ?

Sinon, bel exercice, bien présenté, avec beaucoup d'aller et retour PHP-HTML. Ne serait-t-il pas préférable d'épargner un peu le serveur en allongeant progressivement, en PHP, une seule chaîne HTML à insérer in fine.

Et puis, pourquoi ne pas réserver le PHP pour s'adapter aux clients et afficher simplement leur calendrier ?

À cet égard la page suivante illustre des possibilités malheureusement trop souvent inexploitées sur des pages pourtant exposées au monde entier ?
http://jqueryui.com/demos/datepicker/#localization
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
39
Mouais sinon, un calendrier utilisant la classe DateTime serait de trop ?
Pas si sûre, beaucoup de calendrier ont été présentés ici(surtout ces jours-ci), tous avec leurs "caractéristiques", mais aucune(si je me trompe pas) utilisant la classe DateTime ! Enfin, bon tanpis !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.