une fonction qui affiche un calendrier sous la forme d'un tableau avec les liens parametres
version 1.4.3 mise a jour le 01-02-2006
nouvelle presentation et demo interactive du script sur :
http://hrz.free.fr/calendrier/
telechargement direct possible sur le meme site
utilisation de la fonction:
- usage : @AfficheCalendrier ([$Aff[,$NoMois[,$Annee[,$evenement,$Page[,$CompAff ]]]]])
fournir obligatoirement les elements precedends , pas de $NoMois sans $Aff ect.. ect..
l'affichage du nom du mois est definit comme un lien interne de la page
- les variables d'appel :
$Aff valeur 0 :commence l'affichage par Dimanche default 1
$NoMois : le N° du mois à afficher default le mois actuel
$Annee : l'annee du mois a afficher default l'annee actuel
$evenement : un tableau de donnees pour les liens
$Pages : l'adresse de la page a appeller default la page actuel
$CompAff : si valeur >0 ,le tableau est complete
les liens sont retournes sous la forme :
<A HREF="adresse?NoJour=JJ&Mois=MM&Annee=AAAA">
Source / Exemple :
<?
/*
auteur hrz@free.fr
version 1.4.4 mise a jour 29-05-2006
utilisation de la fonction:
- usage : @AfficheCalendrier ([$Aff[,$NoMois[,$Annee[,$evenement,$Page[,$CompAff ]]]]])
fournir obligatoirement les elements precedends , pas de $NoMois sans $Aff ect.. ect..
l'affichage du nom du mois est definit comme un lien interne de la page
- les variables d'appel :
$Aff valeur 0 :commence l'affichage par Dimanche default 1
$NoMois : le N° du mois à afficher default le mois actuel
$Annee : l'annee du mois a afficher default l'annee actuel
$evenement : un tableau de donnees pour les liens
$Pages : l'adresse de la page a appeller default la page actuel
$CompAff : si valeur >0 ,le tableau est complete
les liens sont retournes sous la forme :
<A HREF="adresse?NoJour=JJ&Mois=MM&Annee=AAAA">
// fonction principale
function AfficheCalendrier ($Aff=1,$Mois="",$Annee=0,$evenement="",$Page="",$Aff1=0) {
// definitions complementaires
$NomDuMois=array("erreur","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$Week=array(
array("d","l","m","M","j","v","s"), // debut d'affichage =dimanche
array("l","m","M","j","v","s","d") // debut d'affichage =lundi
);
// controle pour les valeurs par default
if ($Aff != "0") { $Aff =1; } // toute autre valeurs que 0 retourne 1
if ( $Mois >0 or $Mois >13 ) {}else{$Mois=date("n" );}// mois courrant par default
if ( $Annee == 0 ){$Annee=date("Y");} // annee courrante par default
if (!isset($Page)) {$Page=$_SERVER['PHP_SELF'];} // script d'appel par default
// ajustement des variables du script
$NoJour = -date("w",mktime(0,0,0,$Mois,1,$Annee)); // determine le decalage du 1er dans la semaine
if ($Aff == 0 ) {$NoJour +=1;}else{$NoJour +=2 ; } // pour l'ajuster suivant l'affichage
if ($NoJour >1 && $Aff ==1) { $NoJour -=7;} // on s'assure du debut de l'affichage a la 1ere ligne du tableau
$JourMax =date("t",mktime(0,0,0,$Mois,1,$Annee)); // nombre de jours dans le mois
$Liens = 0; // compteur du tableau des liens
$cejour = date("j n Y"); // la date actuelle
if (!is_array($evenement)) { // fonctionnement erratique si ce n'est pas un tableau
$evenement= (array) $evenement ;
}
@sort($evenement,SORT_NUMERIC ); // le tableau est classe dans l'ordre numeric
$evenement=@array_unique($evenement) ; // eliminee les doublons
$evenement= @array_slice($evenement,0); // suprimer les vides
// affichage du debut de calendrier
print "
<A class=\"MoisAnnee\"NAME=\"$NomDuMois[$Mois]_$Annee\"> $NomDuMois[$Mois] $Annee </A>
<TABLE class=\"Mois\">
<TR class=\"S\">\n";
for ( $w=0;$w<7;$w++){
print " <TD class=\"e".$w."\">".strtoupper($Week[$Aff][$w])."</TD> \n";
}
print " </TR>\n";
// creation du calendrier
for ($semaine=1;$semaine <=6;$semaine++) { // 6 semaines par mois
print " <TR class=\"S$semaine\">\n";
for ($journee=1;$journee <=7;$journee++) { // 7 jours par semaine
if ("$NoJour $Mois $Annee"==$cejour) { // est ce le jour actuel ?
print " <TD class=\"J\">"; // oui on utilise la surbrillance
}else{
print " <TD class=\"J".date("w",mktime(0,0,0,$Mois,$NoJour,$Annee))."\">";
}
if ($NoJour >0 && $NoJour <= $JourMax ){ // si le jour est valide a afficher
if (isset($evenement[$Liens]) && $NoJour >0 && $NoJour == $evenement[$Liens]){ // si evenement
$elements=explode(",",$evenement[$Liens]); // separe les infos
if ($elements[1]=="") { // si url vide
$elements[1]= $Page; // url par default
}
$pos = strpos($elements[1],"?"); // verifier si l'url contiend des parametres
if ($pos === false) {
$elements[1].="?"; // si non on ajoute le ?
}else{
$elements[1].="&"; // si oui on complete par &
}
// le lien est pret pour l'affichage
print "<A HREF=\"$elements[1]NoJour=$NoJour&Mois=$Mois&Annee=$Annee \"title=\"$elements[2]\">$elements[0]</A>";
$Liens++; // incrementer le tableau des liens
}else{ // sinon juste la date
print "$NoJour";
}
}else{
if ($Aff1>0) { // si remplir la table
print "<EM class=\"JComp\"\">"; // afficher une date complementaire au mois en cour
print date("j",mktime(0,0,0,$Mois,$NoJour,$Annee)); // afficher les joursdu mois prec / suivant
print "</EM>";
}else{
print" "; // afficher un espace si jour non valide
}
}
$NoJour ++; // incremente le jour
print "</TD>\n"; // on passe au jour suivant
}
if ($NoJour > $JourMax){ $semaine ++; } // on echappe la derniere ligne si vide
print " </TR>\n"; // semaine suivante
}
print "</TABLE>\n"; // le mois est affiche
}
/****************************************************************/
?>
Conclusion :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//FR">
<html>
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 1st September 2004), see www.w3.org">
<meta http-equiv="content-language" content="fr">
<title>utilisation de la fonction AfficheCalendrier</title>
<meta name="keywords" content="script fonction php affichage calendrier agenda">
<meta name="author" content="hrz">
<meta http-equiv="Reply-to" content="hrz@free.fr">
<link rel="stylesheet" href="base.css" type="text/css">
<link rel="stylesheet" href="AfficheCalendrier.css" type="text/css">
</head>
<body >
<div align="center"><p >Utilisez cette fonction php pour creer votre calendrier<br />
y definir des liens pour en faire un agenda ou autre<br />
la fonction les retournera sous la forme suivante:<br />
<font color="#FF0000"><A HREF="adresse?NoJour=JJ&Mois=MM&Annee=AAAA"><br /></font>
et utilisez sa feuille de style pour en modifier l'affichage </p>
</div>
<p>Un exemple d'utilisation de la fonction AfficheCalendrier v1.3 du 1 janvier 2005<br />
suivre un liens pour les infos de Debug <br />
<p><A href="archives/AfficheCalendrier-1.3.zip" title="essaie">Telecharger le zip </A> de la derniere version</p>
<p>Retrouvez <A href="archives/" title="essaie">les archives de la fonction</a></p>
</p>
<?php
include 'AfficheCalendrier.php'; // instalation de la fonction
// exemple 1: affichage de l'annee avec liens
// cet exemple affichera l'annee en 4 trimestres avec des liens different pour chaques mois
$Annee=date("Y"); // definis l'annee en cour
$Page = 'UtiliserCalendrier.php'; // a redefinir suivant vos script
$evenement = array ( // le tableau des liens tries dans l'ordre des dates
1 => array(
0=>"1,1erJanvier.html,bonne annee", // date, page, infos
1=>"2,".$_SERVER['PHP_SELF'].",", // date, page
"3,,suivre le lien", // date, page default, halt
5,7,10, // date seules
"15,test.php,juste pour voir",
20,25,30
),
2 => array(1,2,3,27),
3 => array(5),
4 => array(8,12,15,16),
5 => array(5,7,9,13,16,18,22),
6 => array(2,5,9,12,25),
7 => array(8,12),
8 => array(15,21,25,29),
9 => array(1,5,9),
10 => array(6,10),
11 => array(25),
12 => array(13,15,19)
);print "<table width=\"100%\" border=0 >\n";
for ($trimestre=0;$trimestre<=3;$trimestre++){
print "<tr>\n";
for ($Mois=1;$Mois<=3;$Mois++){
$MoisEncour= $Mois+($trimestre*3);
print"<td align=\"center\">\n";
// appel de la fonction avec tous les parametres
@AfficheCalendrier(0,$MoisEncour,$Annee,$evenement[$MoisEncour],$Page);
// @AfficheCalendrier(0,
}
print "</tr>\n";
}
print "</table>\n";
/*
// exemple 2: appel minimum de la fonction , elle affichera le mois en cour sans liens
@AfficheCalendrier() // c'est tout !
?>
</body>
</html>
29 mai 2006 à 11:53
22 mai 2006 à 19:43
la ligne 44 de la fonction :
@sort($evenement);
effectue un trie alphanumerique du tableau et la le 2 se retrouve appres le 15
dans le cas du mois de mai
la ligne corrigee devrait etre :
@sort($evenement,SORT_NUMERIC ); // pour garder l'ordre des chiffres
je vient de faire le test en local et cela semble ok
22 mai 2006 à 16:17
Sujet : Re : Aide
Message :
Merci mille fois, voici le script :
<?php/* Date de création: 04/04/2006 */?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Calendrier du mois en cour , affichage simple </title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
<link rel="StyleSheet" href="ete.css" type="text/css">
</head>
<?php
/* pour limiter les donnes transmises, seul une valeur timestamp est utilisee */
if (!isset ($ref)) { $ref=time(); } // pour 1er affichage
if (isset($_GET["ref"])) { $ref=$_GET["ref"]; } // pour les suivants
$Mois=date("n",$ref); // important n => Mois sans les zéros initiaux
$Annee=date("Y",$ref); // Y pour l'annee en format long
// le calcul est reference sur un jour du mois(le 1er ici) si absent, erreurs possible
$prec= mktime (0,0,0,$Mois-1,1,$Annee); // calcul le mois precedent
$suivant= mktime (0,0,0,$Mois+1,1,$Annee); // calcul le mois suivant
$url= $_SERVER['PHP_SELF']; // faut bien faire tourner le compteur
$evenement = array ( // le tableau des liens tries dans l'ordre des dates
1 => array(
0=>"1,../evenement/janvier/1/1janvier.php,BONNE ANNEE", // date, page, infos
1=>"2,../evenement/janvier/2/2janvier.php,BONNE ANNEE",
2=>"3,../evenement/janvier/3/3janvier.php,BONNE ANNEE",
3=>"4,../evenement/janvier/4/4janvier.php,BONNE ANNEE", // date, page
4=>"5,../evenement/janvier/5/5janvier.php,BONNE ANNEE", // date, page default, halt
5=>"6,../evenement/janvier/6/6janvier.php,BONNE ANNEE",
6=>"7,../evenement/janvier/7/7janvier.php,BONNE ANNEE",
7=>"8,../evenement/janvier/8/8janvier.php,BONNE ANNEE",
8=>"9,../evenement/janvier/9/9janvier.php,BONNE ANNEE",
9=>"10,../evenement/janvier/10/10janvier.php,BONNE ANNEE",
10=>"11,../evenement/janvier/11/11janvier.php,BONNE ANNEE",
11=>"12,../evenement/janvier/12/12janvier.php,BONNE ANNEE",
12=>"13,../evenement/janvier/13/13janvier.php,BONNE ANNEE",
13=>"14,../evenement/janvier/14/14janvier.php,BONNE ANNEE",
14=>"15,../evenement/janvier/15/15janvier.php,BONNE ANNEE",
15=>"16,../evenement/janvier/16/16janvier.php,BONNE ANNEE",
16=>"17,../evenement/janvier/17/17janvier.php,BONNE ANNEE",
17=>"18,../evenement/janvier/18/18janvier.php,BONNE ANNEE",
18=>"19,../evenement/janvier/19/19janvier.php,BONNE ANNEE",
19=>"20,../evenement/janvier/20/20janvier.php,BONNE ANNEE",
20=>"21,../evenement/janvier/21/21janvier.php,BONNE ANNEE",
21=>"22,../evenement/janvier/22/22janvier.php,BONNE ANNEE",
22=>"23,../evenement/janvier/23/23janvier.php,BONNE ANNEE",
23=>"24,../evenement/janvier/24/25janvier.php,BONNE ANNEE",
24=>"25,../evenement/janvier/25/25janvier.php,BONNE ANNEE",
25=>"26,../evenement/janvier/26/26janvier.php,BONNE ANNEE",
26=>"27,../evenement/janvier/27/27janvier.php,BONNE ANNEE",
27=>"28,../evenement/janvier/28/28janvier.php,BONNE ANNEE",
28=>"29,../evenement/janvier/29/29janvier.php,BONNE ANNEE",
29=>"30,../evenement/janvier/30/30janvier.php,BONNE ANNEE",
30=>"31,../evenement/janvier/31/31janvier.php,BONNE ANNEE"),
2 => array(
0=>"1,../evenement/fevrier/1/1fevrier.php,Les événements de ce jour",
1=>"2,../evenement/fevrier/2/2fevrier.php,Les événements de ce jour",
3=>"14,../evenement/evrier/14/14fevrier.php,Bonne saint Valentin",
4=>"18,../evenement/fevrier/18/18fevrier.php,Joyeux nouvel an Chinois"),
3 => array(),
4 => array(),
5 => array(
0=>"1,../evenement/mai/1/1mai.php,Les événements de ce jour",
1=>"2,../evenement/mai/2/2mai.php,Les événements de ce jour",
2=>"3,../evenement/mai/3/3mai.php,Les événements de ce jour",
3=>"4,../evenement/mai/2/2mai.php,Les événements de ce jour",
4=>"5,../evenement/mai/2/2mai.php,Les événements de ce jour",
5=>"6,../evenement/mai/2/2mai.php,Les événements de ce jour",
6=>"7,../evenement/mai/2/2mai.php,Les événements de ce jour",
7=>"8,../evenement/mai/8/8mai.php,Les événements de ce jour",
8=>"12,../evenement/mai/12/12mai.php,Les événements de ce jour",
9=>"13,../evenement/mai/13/13mai.php,Les événements de ce jour",
10=>"14,../evenement/mai/14/14mai.php,Les événements de ce jour",
11=>"15,../evenement/mai/15/15mai.php,Les événements de ce jour"),
6 => array(),
7 => array(),
8 => array(),
9 => array(),
10 => array(0=>"28,../evenement/octobre/28/28octobre.php,Les événements de ce jour"),
11 => array(),
12 => array()
);
?>
<NOBR>
[<?php print $url. ">]
[<?php print $url;?> ]
[<?php print $url. ">]
</NOBR>
<?php
include ("AfficheCalendrier.php"); // charger la fonction
AfficheCalendrier(0,$Mois,$Annee,$evenement[$Mois],$_SERVER['PHP_SELF'],0); // affiche le calendrier
?>
</html>
4 févr. 2006 à 17:11
si quelqu'un se proposait de traduire le fichier doc,
cela serait tres utiles a tous ; le script est populaire meme a l'etranger.
merci d'avance
30 avril 2005 à 08:28
http://hrz.free.fr/forum/index.php
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.