Class calendrier avec affichage d'un intervale de jours définis en surbrillance

Contenu du snippet

Une classe que j'ai trouvé ici et enrichier pour l'adapter à mes besoins. en gros j'ai ajouté la possibilité de faire apparaitre certains jours en surbrillance sur le calendrier.... bref tout est dans la classe, commenté et tout avec un exemple en fin de fichier
@+

Source / Exemple :

<?php
class Calendrier {

	 var $moisFR = Array(
	1	=>	"Janvier",
	2	=>	"Février",
	3	=> 	"Mars",
	4	=>	"Avril",
	5	=>	"Mai",
	6	=>	"Juin",
	7	=>	"Juillet",
	8	=>	"Août", 
	9	=>	"Septembre",
	10	=>	"Octobre",
	11	=>	"Novembre",
	12	=>	"Décembre"
	 );

	 var $annee;
	 
	 var $mois;
	 	 
	 var $convertDate;
	 
	 var $premierJour;
	 
	 var $nombreJour;

	 var $debutPremiereLigne;
	 
	 var $finPremiereLigne;
	 
	 var $autreLigne;	
		 	 
		 	 
	 //Constructor
	 function Calendrier(){
	 $this ->tabDateSee = Array();
	 $this->cssTable = 'border: 1px solid gray; padding:2px; margin: 5px; float:left; font-family: arial; font-size: 11px; text-align: center; background: #fafafa;';
	 
	 $this->cssTDDays = 'background: #dfdfdf; font-weight: bold';
	 
	 $this->cssTD = 'border: 1px solid gray; ';
	 $this->cssTDSee = 'border: 1px solid gray; background: pink;';
	 
   }
	 
	 
	 function creeCalendrier($choixAnnee,$choixMois) {    

        if ($choixAnnee != "") $this->annee = $choixAnnee;
        
		if ($choixMois != "") $this->mois = $choixMois;
		
		$this->convertDate = gregoriantojd($this->mois,1,$this->annee);
		
		$this->premierJour = jddayofweek($this->convertDate,3)-1;
		
		$this->nombreJour = cal_days_in_month(1,$this->mois,$this->annee);
	 	
		if ($this->premierJour == -1) $this->premierJour = 6;
		
		
		
		
		
		for($i=0;$i<$this->premierJour;$i++){ 
		
        $this->debutPremiereLigne .= "<td>&nbsp;</td>";
    }
   /* 
  echo '<pre>';  
print_r($this->tabDateSee);
  echo '</pre>';
*/

		for($i=0;$i<(7-$this->premierJour);$i++){
		
		 $caseencours = $this->annee.'-'.$this->mois.'-'.($i+1);
	//	 	echo $caseencours.'<br />-';
    	//on teste si la case en cours est dans le tableau des dates a afficher
    		if (in_array ($caseencours, array_values($this->tabDateSee)) ){
		  $cssSee = true;
	//	  echo 'true<br>';
    } else {
      $cssSee = false;
  //    echo 'false<br>';
    } 

        $this->finPremiereLigne .= '<td';
        if ($cssSee==true) {
			     $this->finPremiereLigne .= ' style="'.$this->cssTDSee.'" ';
        } else {
          $this->finPremiereLigne .= ' style="'.$this->cssTD.'" ';
        }
        $this->finPremiereLigne .= '>'.($i+1)."</td>";
    }
    
    
    
    

		$i2=0;
		for($i = (7-$this->premierJour);$i < $this->nombreJour;$i++){
		
    $caseencours = $this->annee.'-'.$this->mois.'-'.($i+1);
	//	echo $caseencours.'<br />';
		
		//on teste si la case en cours est dans le tableau des dates a afficher
	//	print_r($this->tabDateSee);
		
		if (in_array ($caseencours, array_values($this->tabDateSee)) ){
		  $cssSee = true;
	//	  echo 'true<br>';
    } else {
      $cssSee = false;
  //    echo 'false<br>';
    }
		
			if($i2 == 7){
				$this->autreLigne .= "</tr><tr>";
				$i2 = 0;
			}
			
			
			
			$this->autreLigne .= '<td';
			if ($cssSee==true) {
			   $this->autreLigne .= ' style="'.$this->cssTDSee.'" ';
      }else {
         $this->autreLigne .= ' style="'.$this->cssTD.'" ';
      }
      $this->autreLigne .= '>'.($i+1).'</td>';
		$i2++;
		}

    }
	
	//crée ou ajoute des valeurs de dates a un tableau qui vas servir à stocker les dates à mettre en couleur sur le cal
	function addDateSee ($dateDeb, $dateFin='0000-00-00') {      
      
	   //si pas de date de debut on sort
     if ($dateDeb == "") {return false; break;} else {
        //si pas de date de fin
        if ($dateFin=='0000-00-00') {
        
        //on add juste la date de debut au tableau
        $this->tabDateSee[] = $dateDeb;
        } else {
      
        //on calcule toutes les dates entre les deux dates et on add
        $tabtempsee = $this->clacDateInter ($dateDeb, $dateFin);
        $this->tabDateSee = array_merge($this->tabDateSee,$tabtempsee);
        }
     }
    
  }
  
  function clacDateInter ($dateDeb, $dateFin) {
  if ($dateDeb == "" or $dateFin=="") {return false; break;} else {
      //on considere qu'il y a 31j par mois vu que l'affichage sera géré par l'autre fonction on s'en fout en fait
      list($yeard,$monthd, $dayd ) = split('[/.-]', $dateDeb);
      list($yearf,$monthf, $dayf) = split('[/.-]', $dateFin);
      
   //   echo 'debut : '.$monthd.'-'.$dayd.'-'.$yeard.'<br />';
   //   echo 'fin : '.$monthf.'-'.$dayf.'-'.$yearf.'<br />';
      
      //boucle pr les années
      for ($i = $yeard; $i<=$yearf; $i++) {
      
    //  echo '<br>année : '.$i.' , ';
      
          //boucles pour les mois
          //si le l'année est celle la date de fin
          if ($i == $yearf ) {
              $limitm = $monthf;} else { $limitm=12; }  
          for ($j = $monthd; $j<=$limitm; $j++) {
     //       echo '<br>mois : '.$j.' , ';
              //boucle pour les jours
              //on cherche la limite
              //si le mois et l'année sont ceux e la date de fin
              if ($i == $yearf && $j==$monthf) {
              $limitd = $dayf;} else {  $limitd=31; }  
              for ($h = $dayd; $h<=$limitd; $h++) {
            // echo 'jour : '.$h.' , ';
                  $temptab [] = $i.'-'.$j.'-'.$h ;
              
              }
               //on réinitialise le jour à 1 pour la deuxieme boucle et les suivantes
              $dayd = 1;
          }
          //on réinitialise le mois à 1 pour la deuxieme boucle et les suivantes
          $monthd = 1;
         
      }
    /*
      echo '<pre>aaaa';
      print_r ($temptab);
      echo '</pre>';
      */
      return ($temptab);
      
    }
  }
	
	

	
	
	
	function afficherCalendrier() {
	
		echo '
			<table style="'.$this->cssTable.'">
				<tr>
        			<td colspan="7">[ <a href="?month='.$this->mois.'" target="_self">'.$this->moisFR[$this->mois].'</a> ]</td>
      			</tr>
      			<tr style="'.$this->cssTDDays.'">
        			<td>L</td>
        			<td>M</td>
        			<td>M</td>
        			<td>J</td>
        			<td>V</td>
       	 			<td>S</td>
        			<td>D</td>
      			</tr>	
		';
		echo '<tr>';
		
        echo $this->debutPremiereLigne;
        echo $this->finPremiereLigne;
		
		echo '</tr>';
		echo '<tr>';
		
        echo $this->autreLigne;
			
		echo '</tr>';		
		echo '</table>';

    }
	
}
?>


<?php
$cal = new Calendrier();
$cal->addDateSee('2008-8-5');
$cal->addDateSee('2008-8-9');
$cal->addDateSee('2008-8-6', '2008-8-31');
$cal->creeCalendrier("2008","8");
//$cal->clacDateInter('2008-08-03', '2009-08-10');
//print_r ($cal);
$cal->afficherCalendrier();

$cal2 = new Calendrier();
$cal2->addDateSee('2008-9-5');
$cal2->addDateSee('2008-9-14', '2008-11-10');
$cal2->creeCalendrier("2008","9");
//$cal->clacDateInter('2008-08-03', '2009-08-10');
//print_r ($cal);
$cal2->afficherCalendrier();


?>

Conclusion :

La classe de base
http://www.phpcs.com/codes/CLASSE-PHP-MINI-CALENDRIER-AVEC-12-MOIS-AFFICHES_34299.aspx

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.