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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 907 fois - Téléchargée 16 fois

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

Ajouter un commentaire

Commentaires

aquewel
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

je te propose de regarder ce code

http://www.phpcs.com/codes/PERIODICITE-EVENEMENT_31246.aspx

un bou de code que j'ai developpé
pour determiner la date de debut d'un evenement
exemple : Tous les premiers mercredi de aout pendant 5jours (c'est la date de debut des fetes de bayonne)
ca retournera la date pour chaque année
et aussi la date de fin

combiner a ta class ca fait un truc sympa

si le code entier te tente fait moi signe....
aquewel
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

Ton code est super !

et je voudrais m'en servir mais comment changer les dates et mettre des dates au format francais ???? pour les intervalles ?????? merci :-)
cs_bidulette
Messages postés
1
Date d'inscription
jeudi 27 septembre 2007
Statut
Membre
Dernière intervention
27 septembre 2007

Très sympa comme script, Merci beaucoup!

Juste une petite question: comment afficher en rouge des dates chevauchant sur 2 mois différents? Pas trouvé la façon de faire... oups.
Merci
cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
c'était ecrit dans l'explication finale d'ailleurs :)... j'me disais aussi ^^
cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3

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.