Calendrier en 70 lignes

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

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.