Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2011, 14h44   #1
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Gros problème avec Fonction Calendrier

Merci de jreaux62 de ton aide je viens d'essayer le code que tu as poster et la variable est bien récupérer mais il m'affiche toujours une multitude de td
en faites il créer un tr avec 30 ou 31 td (en fonction du nombre de jours ) et une multitude de <td> </td> je pense que mon for et mon if sont mal placé.

revoici le code que tu as posté

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
<?php
function calendrier($mois,$annee) //renvoi un calendrier
{
	//variables
	$date = date('Y-m-01');
   $moi = date('n');
   $year = date('Y');
	$ts = mktime(1,1,1,$mois,1,$annee); //Recuperation du timestamp du numero du jour de base cad le numero du jour du premier jour du mois ouf !
	$tab = getdate($ts); //Recuperation du numero du jour de base, le numero du jour du premier jour du mois
	$j = 1 ; //premier jour 	
	$nbjour = date('t',$ts) ;//nombre de jour dans le mois
	$nom_mois = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobtre','Novembre','Décembre');//Nom des moins in French
	//cette sequence corrige le numero du dimanche. PHP donne 0, dans notre cas 7 est préférable, donc..
	if($tab['wday'] == 0)
	{
		$dp = 7 ;
	}
	else
	{
		$dp = $tab['wday'] ;
	}
	$moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
   $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
	//Affichage de l'entête du calendrier
	echo '
	<table width="100%" border="1">
		<tr>
			<td align="center" colspan="7" class="calendrier-mois">
				<a href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$nom_mois[$mois-1].' '.$year.'</b> <a  href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a>
			</td>
		</tr>
	';
	echo '
		<tr>
			<td>Lun</td>
			<td>Mar</td>
			<td>Mer</td>
			<td>Jeu</td>
			<td>Ven</td>
			<td>Sam</td>
			<td>Dim</td>
		</tr>
	';
	//Affichage du calendrier
	for($i=1;$i<=42;$i++)
	{
		if($i % 7 == 1 ) //si il reste un, on commence forcement une nouvelle ligne	
		{
			echo '
		<tr>
			';
		}
		for($f = $date ; $f < $moiprochain ;$f = date('Y-m-d',strtotime($f . '+1 day'))) {
			if(($dp <= $i)&&($j <= $nbjour))//si nous sommes apres le numero du premier jour et que nous n avons pas
			{ // passé le 30 ou 31 : on affiche
				echo '
			<td>
				<a href="#" onclick="updatedate(\''.$f.'\')">'.$j.'</a>
			</td>
				';
				$j++;
			} // fin if
			else //sinon case vide
			{
				echo '
			<td>
			</td>
				';
			} // fin else
			if($i % 7 == 0 ) //si il ne reste rien, cad des multiples de 7, on se retrouve forcement en fin de ligne	
			{
			echo '
		</tr>
				';
			} // fin if
		} // fin for f
	} // fin for i
		echo '
	</table>
			'; //affichage de la fin du tableau
 
		//calcul des positions des mois
 
 
		//barre de navigation	
 
} //Fin fonction
?>
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 15h14   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Cette ligne est bizarre :
Code :
		for($f = $date ; $f < $moiprochain ;$f = date('Y-m-d',strtotime($f . '+1 day'))) {
Normalement, ca ressemble plutot a ca :
Code :
		for($f = $date ; $f < $moiprochain ;$f++;) {
Mais il faudrait connaitre la valeur des variables $date, $moiprochain et date('Y-m-d',strtotime($f . '+1 day')) ... pour comprendre

Quel est le code source actuellement généré ? ("-> "Afficher la source")
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 15h22   #3
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Bouh, tout ça me semble bien compliqué, regarde si ceci (à accomoder à ta convenance) te suffit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function calendar($month, $year)
{
    $ts = strtotime("$year-$month-1") ;
    $days = date('t', $ts) ; // Nombre de jours dans le mois
    $firstday = date('N', $ts) ; // 1 = lundi, 2 = mardi, ..., 7 = dimanche
 
    // Création des cases (vides pour le moment) du calendrier
    $calendar = array_fill(0, 6 * 7, NULL) ;
 
    // On place les dates du mois dans le calendrier
    // Il existe peut-être une fonction PHP qui pourrait faire cela
    for ( $date = 1 ; $date <= $days ; $date++ ) {
        $calendar[($date - 1) + ($firstday - 1)] = $date ;
    }
 
    // Découpe du calendrier en semaines
    $calendar = array_chunk($calendar, 7) ;
 
    return $calendar ;
}
Ceci :

Code :
$calendar = calendar(8, 2011) ;
Te donnera cela :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => 6
            [6] => 7
        )
 
    [1] => Array
        (
            [0] => 8
            [1] => 9
            [2] => 10
            [3] => 11
            [4] => 12
            [5] => 13
            [6] => 14
        )
 
    [2] => Array
        (
            [0] => 15
            [1] => 16
            [2] => 17
            [3] => 18
            [4] => 19
            [5] => 20
            [6] => 21
        )
 
    [3] => Array
        (
            [0] => 22
            [1] => 23
            [2] => 24
            [3] => 25
            [4] => 26
            [5] => 27
            [6] => 28
        )
 
    [4] => Array
        (
            [0] => 29
            [1] => 30
            [2] => 31
            [3] => 
            [4] => 
            [5] => 
            [6] => 
        )
 
    [5] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
        )
 
)
Que tu pourras utiliser ainsi :

Code :
1
2
3
4
5
6
7
8
9
<table border="1">
    <?php foreach ( $calendar as $week ) : ?>
        <tr>
            <?php foreach ( $week as $day ) : ?>
                <td><?php echo $day ?></td>
            <?php endforeach ?>
        </tr>
    <?php endforeach ?>
</table>
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 16h16   #4
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : Calendrier gros probleme

jreaux62 : Merci mais en faite si je change le code parce que tu as mis j'ai l'impresion que ca fait bugguer la page

Le code actuellement afficher ressemble à ca

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
 
<table width="100%" border="1">
		<tbody><tr>
			<td align="center" class="calendrier-mois" colspan="7">
				<a onclick="updatelistdate('2011-07-01')" href="#"><b>&lt;</b></a> <b>Ao&#65533;t 2011</b> <a onclick="updatelistdate('2011-09-01')" href="#"><b>&gt;</b></a>
			</td>
		</tr>
 
		<tr>
			<td>Lun</td>
			<td>Mar</td>
			<td>Mer</td>
			<td>Jeu</td>
			<td>Ven</td>
			<td>Sam</td>
			<td>Dim</td>
		</tr>
 
		<tr>
 
			<td>
				<a onclick="updatedate('2011-08-01')" href="#">1</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-02')" href="#">2</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-03')" href="#">3</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-04')" href="#">4</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-05')" href="#">5</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-06')" href="#">6</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-07')" href="#">7</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-08')" href="#">8</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-09')" href="#">9</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-10')" href="#">10</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-11')" href="#">11</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-12')" href="#">12</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-13')" href="#">13</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-14')" href="#">14</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-15')" href="#">15</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-16')" href="#">16</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-17')" href="#">17</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-18')" href="#">18</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-19')" href="#">19</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-20')" href="#">20</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-21')" href="#">21</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-22')" href="#">22</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-23')" href="#">23</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-24')" href="#">24</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-25')" href="#">25</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-26')" href="#">26</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-27')" href="#">27</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-28')" href="#">28</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-29')" href="#">29</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-30')" href="#">30</a>
			</td>
 
			<td>
				<a onclick="updatedate('2011-08-31')" href="#">31</a>
			</td>
 
			<td>
			</td>
 
			<td>
			</td>
 
			<td>
			</td>..........................</tr></table>
En faites j'ai besoin de récupère la variable $f (updatedate('2011-08-01')) pour utiliser ajax de manière a ce que au clic sur la date il affiche les nouveaux événement de la date cliqué.

En faites à la base je suis partie de ce cette fonction là qui affichait un calendrier de type une ligne par jour
un jour = <tr><td>jour</td></tr>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
  function calendar() {
        $arrayday = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
        $arraymoi = array('','Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
        $date = date('Y-m-01');
        $moi = date('n');
        $year = date('Y');
 
        $moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
        $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
        echo '<table width="150"><tr><td align="center" colspan="2" class="calendrier-mois"><a href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$arraymoi[$moi].' '.$year.'</b> <a  href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
        for($i = $date ; $i < $moiprochain ;$i = date('Y-m-d',strtotime($i . '+1 day'))) {
            $jourw = date('w',strtotime($i));
            $jourd = date('d',strtotime($i));
 
            echo '<tr><td  class="calendrier-jour'.$arrayday[$jourw].'" style="padding-left:10px"><a href="#" onclick="updatedate(\''.$i.'\')">'.$arrayday[$jourw].'</a></td><td width="5" class="calendrier-jour'.$arrayday[$jourw].'"><a href="#" onclick="updatedate(\''.$i.'\')">'.$jourd.'</a></td></tr>';
        }
        echo '<tr><td align="center" colspan="2" class="calendrier-footer"></td></tr></table>';
    }
alors que moi je souhaitais un calendrier plus standart c'est à dire une ligne par semaine et une cellule par jour de la semaine
de type
semaine <tr>
jour de la semiane <td></td>
fin de semaine </tr>

Séb : Merci de ton aide mais avec mes connaissance je pense que c'est plus simple d'essayer d'adapter ce calendrier qui autilise déjà ajax que de creer quelque chose de nouveaux.
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 16h28   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Utilise le code de Séb. il est nickel

il faut juste que tu modifies cette partie :
Code :
1
2
3
4
5
6
7
            <?php foreach ( $week as $day ) : ?>
                <?php if ($day!='') : ?>
				<td><a href="#" onclick="updatedate(<?php echo $annee.'-'.$mois.'-'.$day; ?>)"><?php echo $day; ?></a></td>
                <?php else : ?>
				<td>&nbsp;</td>				
                <?php endif ?>
            <?php endforeach ?>
Voila un exemple complet fonctionnel :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
function calendar($month, $year)
{
    $ts = strtotime($year.'-'.$month.'-1') ;
    $days = date('t', $ts) ; // Nombre de jours dans le mois
    $firstday = date('N', $ts) ; // 1 = lundi, 2 = mardi, ..., 7 = dimanche
 
    // Création des cases (vides pour le moment) du calendrier
    $calendar = array_fill(0, 6 * 7, NULL) ;
 
    // On place les dates du mois dans le calendrier
    for ( $date = 1 ; $date <= $days ; $date++ ) {
        $calendar[($date - 1) + ($firstday - 1)] = $date ;
    }
 
    // Découpe du calendrier en semaines
    $calendar = array_chunk($calendar, 7) ;
 
    return $calendar ;
}
?>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 	<title>Calendrier</title>
	<style type="text/css">
.calendrier-table { border-collapse:collapse; padding:2px; }
.calendrier-table td { text-align:center; }
.tdcal { background:#BBE2E8; }
	</style>
</head>
 
<body>
 
<?php 
$les_mois = array(1 => 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
 
// exemple : 3/2011
$annee = 2011;
$mois = 3;
 
// affichage du calendrier
$calendar = calendar($mois, $annee); 
?>
<table class="calendrier-table" border="1"><caption><?php echo $les_mois[$mois].' '.$annee; ?></caption>
		<tr>
			<th>Lun</th>
			<th>Mar</th>
			<th>Mer</th>
			<th>Jeu</th>
			<th>Ven</th>
			<th>Sam</th>
			<th>Dim</th>
		</tr>
    <?php foreach ( $calendar as $week ) : ?>
        <tr>
            <?php foreach ( $week as $day ) : ?>
                <?php if ($day!='') : ?>
				<td class="tdcal"><a onclick="updatedate(<?php echo $annee.'-'.$mois.'-'.$day; ?>)" href="#"><?php echo $day; ?></a></td>
                <?php else : ?>
				<td>&nbsp;</td>				
                <?php endif ?>
            <?php endforeach ?>
        </tr>
    <?php endforeach ?>
</table>
 
</body>
</html>
ps : ce code utilise la "Syntaxe alternative PHP"
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 16h50   #6
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
Pas mal Séb
Sinon si on veux corriger le code de nanou22
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php 
function calendrier($mois,$annee) //renvoi un calendrier
	{
	$nom_mois = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobtre','Novembre','Décembre');//Nom des moins in French
	// $date = Date du premier jour du mois  
	$date = mktime(0, 0, 0, $mois, 1, $annee);
	$f=date('Y-m-d', $date);
	$moiprochain = date('Y-m-d',strtotime($f . '+1 month'));
    $moiapresedent = date('Y-m-d',strtotime($f . '-1 month'));
	//Affichage de l'entête du calendrier
	echo '<table width="100%" border="1"><tr><td align="center" colspan="7" class="calendrier-mois"><a href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$nom_mois[$mois-1].' '.$annee.'</b> <a  href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
	echo  "<tr><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr>";
		// $j = Numero du jour dans la semaine 0: Lun  1 : Mar ... 6: Dim
		$j=date("w",$date)-1; if ($j<0) {$j=6;}
		// $i = 1er jour du mois 
		$i=1;
		// $nbjour = Nombre de jour dans le mois
		$nbjour = date("t",$date);
		// Remplir les cases vides avant le premier jour du mois
		if ($j>0) {
		echo "<tr>";
		for($i = 0 ; $i < $j ;$i++) { echo "<td></td>";}
		}
        // Remplir le calendrier
		for($i = 1 ; $i <= $nbjour ;$i++) {
		// Cas du Lundi : On commence une nouvelle ligne du tableau
		if($j == 0 ) { 	echo "<tr>"; }
		//echo '<td><a href="#" onclick="updatedate(\''.$annee.'-'.$mois.'-'.$i.'\')">'.$i.'</a></td>';
		echo '<td><a href="#" onclick="updatedate(\''.$f.'\')">'.$i.'</a></td>';
        // Cas du Dimanche : On ferme la ligne du tableau
		if($j == 6 ) { echo "</tr>"; }	
		// On passe a jour suivant si on arrive a Dimanche on retourne a Lundi
		$j = ($j+1) % 7 ;
		$f = date('Y-m-d',strtotime($f . '+1 day'));
		} 
		// Remplir les cases vides apres le dernier jour du mois
		if ($j>0) {
		for($i = $j ; $i <=6 ;$i++) { echo "<td></td>";}
 		echo "</tr>";
		}
		echo "</table>"; 
	} 
?>
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/08/2011, 18h38   #7
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : Calendrier gros probleme

Merciii fab256 c'est exactement ce que je voulais !!!!

Mais maintenant j'ai un probleme pur l'adapter à ma fonction updatelistdate


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
function updatelistdate() {
        $date = JRequest :: getVar('date', '');
        $arrayday = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
        $arraymoi = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
        $moi = date('n',strtotime($date));
        $year = date('Y',strtotime($date));
        $moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
        $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
 
       echo '<table width="100%" border="1"><tr><td align="center" colspan="7" class="calendrier-mois"><a  href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$arraymoi[$moi].' '.$year.'</b> <a href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
	echo  "<tr><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr>";
		// $j = Numero du jour dans la semaine 0: Lun  1 : Mar ... 6: Dim
		$j=date("w",$date)-1; if ($j<0) {$j=6;}
		// $i = 1er jour du mois 
		$i=1;
		// $nbjour = Nombre de jour dans le mois
		$nbjour = date("t",$date);
		// Remplir les cases vides avant le premier jour du mois
		if ($j>0) {
		echo "<tr>";
		for($i = 0 ; $i < $j ;$i++) { echo "<td></td>";}
		}
        // Remplir le calendrier
		for($i = 1 ; $i <= $nbjour ;$i++) {
		// Cas du Lundi : On commence une nouvelle ligne du tableau
		if($j == 0 ) { 	echo "<tr>"; }
		//echo '<td><a href="#" onclick="updatedate(\''.$annee.'-'.$mois.'-'.$i.'\')">'.$i.'</a></td>';
		echo '<td><a href="#" onclick="updatedate(\''.$f.'\')">'.$i.'</a></td>';
        // Cas du Dimanche : On ferme la ligne du tableau
		if($j == 6 ) { echo "</tr>"; }	
		// On passe a jour suivant si on arrive a Dimanche on retourne a Lundi
		$j = ($j+1) % 7 ;
		$f = date('Y-m-d',strtotime($f . '+1 day'));
		} 
		// Remplir les cases vides apres le dernier jour du mois
		if ($j>0) {
		for($i = $j ; $i <=6 ;$i++) { echo "<td></td>";}
 		echo "</tr>";
		}
		echo "</table>"; 
        exit();
 
    }
ça fonctionne pour les mois, les mois change bien au clic sur > ou < mais il ne change pas les jour en fonction du mois.

Serais tu pourquoi car j'avoue que la je m'y perd un peu, beaucoup !!
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 20h51   #8
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
tu mélange fonction javascript et fonction php, le onclick fait appel a la fonction javascript updatelistdate, ou est ta fonction javascript updatelistdate???
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 21h04   #9
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : Calendrier gros problème

C'est une fonction qui est appeler dans l'entête ma page php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
$ajax = JRequest::getVar('ajax',null);
if(!$ajax){
$session =& JFactory::getSession();
//$css = JURI::base().'components/com_formation/assets/style.css';
$document =& JFactory::getDocument();
//$document->addStyleSheet($css);
$js =" 
 
function updatelistdate(date){
url = 'index2.php?option=com_formation&view=categorie&c=categorie&task=updatelistdate&date='+date;
var myRequest = new Ajax(url,{
method: 'get',
onSuccess: function(responseText) {
$('calendrier').setHTML(responseText);
}}).request();
}
D'avance merci.
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 21h46   #10
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
Pour le changement des mois tu as fait appel a la fonction updatelistdate et pour les jours tu as fait appel a une fonction updatedate qui n'est pas défini.
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 22h01   #11
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut re : Calendrier gros problème

Tout d'abord Merci fab256.

Mais je ne pense pas que se soit à cause de cela car la fonction updatedate
sert à actualiser la liste des evenement lié au jour sur le quel on à cliquer alors que moi mon probleme se situe vraiment dans la fonction updatelistdate

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
  function updatelistdate() {
        $date = JRequest :: getVar('date', '');
        $arrayday = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
        $arraymoi = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
        $moi = date('n',strtotime($date));
        $year = date('Y',strtotime($date));
		$f=date('Y-m-d', $date);
        $moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
        $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
 
       echo '<table width="100%" border="1"><tr><td align="center" colspan="7" class="calendrier-mois"><a  href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$arraymoi[$moi].' '.$year.'</b> <a href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
	echo  "<tr><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr>";
		// $j = Numero du jour dans la semaine 0: Lun  1 : Mar ... 6: Dim
		$j=date("w",$date)-1; if ($j<0) {$j=6;}
		// $i = 1er jour du mois 
		$i=1;
		// $nbjour = Nombre de jour dans le mois
		$nbjour = date("t",$date);
		// Remplir les cases vides avant le premier jour du mois
		if ($j>0) {
		echo "<tr>";
		for($i = 0 ; $i < $j ;$i++) { echo "<td></td>";}
		}
        // Remplir le calendrier
		for($i = 1 ; $i <= $nbjour ;$i++) {
		// Cas du Lundi : On commence une nouvelle ligne du tableau
		if($j == 0 ) { 	echo "<tr>"; }
		//echo '<td><a href="#" onclick="updatedate(\''.$annee.'-'.$mois.'-'.$i.'\')">'.$i.'</a></td>';
		echo '<td><a href="#" onclick="updatedate(\''.$f.'\')">'.$i.'</a></td>';
        // Cas du Dimanche : On ferme la ligne du tableau
		if($j == 6 ) { echo "</tr>"; }	
		// On passe a jour suivant si on arrive a Dimanche on retourne a Lundi
		$j = ($j+1) % 7 ;
		$f = date('Y-m-d',strtotime($f . '+1 day'));
		} 
		// Remplir les cases vides apres le dernier jour du mois
		if ($j>0) {
		for($i = $j ; $i <=6 ;$i++) { echo "<td></td>";}
 		echo "</tr>";
		}
		echo "</table>"; 
        exit();
 
    }
Voilà ce que cela me donne comme résultat

Code :
1
2
 
<div id="calendrier" class="calendrier"><table width="100%" border="1"><tbody><tr><td align="center" class="calendrier-mois" colspan="7"><a onclick="updatelistdate('2011-08-01')" href="#"><b>&lt;</b></a> <b>Septembre 2011</b> <a onclick="updatelistdate('2011-10-01')" href="#"><b>&gt;</b></a></td></tr><tr><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr><tr><td></td><td></td><td></td><td><a onclick="updatedate('1970-01-01')" href="#">1</a></td><td><a onclick="updatedate('1970-01-02')" href="#">2</a></td><td><a onclick="updatedate('1970-01-03')" href="#">3</a></td><td><a onclick="updatedate('1970-01-04')" href="#">4</a></td></tr><tr><td><a onclick="updatedate('1970-01-05')" href="#">5</a></td><td><a onclick="updatedate('1970-01-06')" href="#">6</a></td><td><a onclick="updatedate('1970-01-07')" href="#">7</a></td><td><a onclick="updatedate('1970-01-08')" href="#">8</a></td><td><a onclick="updatedate('1970-01-09')" href="#">9</a></td><td><a onclick="updatedate('1970-01-10')" href="#">10</a></td><td><a onclick="updatedate('1970-01-11')" href="#">11</a></td></tr><tr><td><a onclick="updatedate('1970-01-12')" href="#">12</a></td><td><a onclick="updatedate('1970-01-13')" href="#">13</a></td><td><a onclick="updatedate('1970-01-14')" href="#">14</a></td><td><a onclick="updatedate('1970-01-15')" href="#">15</a></td><td><a onclick="updatedate('1970-01-16')" href="#">16</a></td><td><a onclick="updatedate('1970-01-17')" href="#">17</a></td><td><a onclick="updatedate('1970-01-18')" href="#">18</a></td></tr><tr><td><a onclick="updatedate('1970-01-19')" href="#">19</a></td><td><a onclick="updatedate('1970-01-20')" href="#">20</a></td><td><a onclick="updatedate('1970-01-21')" href="#">21</a></td><td><a onclick="updatedate('1970-01-22')" href="#">22</a></td><td><a onclick="updatedate('1970-01-23')" href="#">23</a></td><td><a onclick="updatedate('1970-01-24')" href="#">24</a></td><td><a onclick="updatedate('1970-01-25')" href="#">25</a></td></tr><tr><td><a onclick="updatedate('1970-01-26')" href="#">26</a></td><td><a onclick="updatedate('1970-01-27')" href="#">27</a></td><td><a onclick="updatedate('1970-01-28')" href="#">28</a></td><td><a onclick="updatedate('1970-01-29')" href="#">29</a></td><td><a onclick="updatedate('1970-01-30')" href="#">30</a></td><td><a onclick="updatedate('1970-01-31')" href="#">31</a></td><td></td></tr></tbody></table></div>

Alors que la fonction calendrier fonctionne parfaitement (grâce à toi )
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
function calendrier($mois,$annee) //renvoi un calendrier
	{
	$nom_mois = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobtre','Novembre','Décembre');//Nom des moins in French
	// $date = Date du premier jour du mois  
	$date = mktime(0, 0, 0, $mois, 1, $annee);
	$f=date('Y-m-d', $date);
	$moiprochain = date('Y-m-d',strtotime($f . '+1 month'));
    $moiapresedent = date('Y-m-d',strtotime($f . '-1 month'));
	//Affichage de l'entête du calendrier
	echo '<table width="100%" border="1"><tr><td align="center" colspan="7" class="calendrier-mois"><a href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$nom_mois[$mois-1].' '.$annee.'</b> <a  href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
	echo  "<tr><td>Lun</td><td>Mar</td><td>Mer</td><td>Jeu</td><td>Ven</td><td>Sam</td><td>Dim</td></tr>";
		// $j = Numero du jour dans la semaine 0: Lun  1 : Mar ... 6: Dim
		$j=date("w",$date)-1; if ($j<0) {$j=6;}
		// $i = 1er jour du mois 
		$i=1;
		// $nbjour = Nombre de jour dans le mois
		$nbjour = date("t",$date);
		// Remplir les cases vides avant le premier jour du mois
		if ($j>0) {
		echo "<tr>";
		for($i = 0 ; $i < $j ;$i++) { echo "<td></td>";}
		}
        // Remplir le calendrier
		for($i = 1 ; $i <= $nbjour ;$i++) {
		// Cas du Lundi : On commence une nouvelle ligne du tableau
		if($j == 0 ) { 	echo "<tr>"; }
		//echo '<td><a href="#" onclick="updatedate(\''.$annee.'-'.$mois.'-'.$i.'\')">'.$i.'</a></td>';
		echo '<td><a href="#" onclick="updatedate(\''.$f.'\')">'.$i.'</a></td>';
        // Cas du Dimanche : On ferme la ligne du tableau
		if($j == 6 ) { echo "</tr>"; }	
		// On passe a jour suivant si on arrive a Dimanche on retourne a Lundi
		$j = ($j+1) % 7 ;
		$f = date('Y-m-d',strtotime($f . '+1 day'));
		} 
		// Remplir les cases vides apres le dernier jour du mois
		if ($j>0) {
		for($i = $j ; $i <=6 ;$i++) { echo "<td></td>";}
 		echo "</tr>";
		}
		echo "</table>"; 
	}
En faites au clic sur > mois suivant par exemple cela appelle la fonction updatelistdate qui dit réactualiser le calendrier (en ajax) et du coup afficher les jours du nouveau mois et ainsi de suite

Merci de ton aide, en espérant avoir été clair..
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 22h04   #12
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : Calendrier gros probleme

Pour info voici les 2 fonction qui était utiliser avant mes modification

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function calendar() {
        $arrayday = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
        $arraymoi = array('','Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
        $date = date('Y-m-01');
        $moi = date('n');
        $year = date('Y');
 
        $moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
        $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
        echo '<table width="150"><tr><td align="center" colspan="2" class="calendrier-mois3"><a href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$arraymoi[$moi].' '.$year.'</b> <a  href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
        for($i = $date ; $i < $moiprochain ;$i = date('Y-m-d',strtotime($i . '+1 day'))) {
            $jourw = date('w',strtotime($i));
            $jourd = date('d',strtotime($i));
 
            echo '<tr><td  class="calendrier-jour'.$arrayday[$jourw].'" style="padding-left:10px"><a href="#" onclick="updatedate(\''.$i.'\')">'.$arrayday[$jourw].'</a></td><td width="5" class="calendrier-jour'.$arrayday[$jourw].'"><a href="#" onclick="updatedate(\''.$i.'\')">'.$jourd.'</a></td></tr>';
        }
        echo '<tr><td align="center" colspan="2" class="calendrier-footer"></td></tr></table>';
    }
et

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 function updatelistdate() {
        $date = JRequest :: getVar('date', '');
        $arrayday = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
        $arraymoi = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai','Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
        $moi = date('n',strtotime($date));
        $year = date('Y',strtotime($date));
        $moiprochain = date('Y-m-d',strtotime($date . '+1 month'));
        $moiapresedent = date('Y-m-d',strtotime($date . '-1 month'));
 
        echo '<table width="150"><tr><td class="calendrier-mois" align="center" colspan="2"><a  href="#" onclick="updatelistdate(\''.$moiapresedent.'\')"><b><</b></a> <b>'.$arraymoi[$moi].' '.$year.'</b> <a href="#" onclick="updatelistdate(\''.$moiprochain.'\')"><b>></b></a></td></tr>';
        for($i = $date ; $i < $moiprochain ;$i = date('Y-m-d',strtotime($i . '+1 day'))) {
            $jourw = date('w',strtotime($i));
            $jourd = date('d',strtotime($i));
 
            echo '<tr><td  class="calendrier-jour'.$arrayday[$jourw].'" style="padding-left:10px"><a href="#" onclick="updatedate(\''.$i.'\')">'.$arrayday[$jourw].'</a></td><td width="5" class="calendrier-jour'.$arrayday[$jourw].'"><a href="#" onclick="updatedate(\''.$i.'\')">'.$jourd.'</a></td></tr>';
        }
        echo '<tr><td align="center" colspan="2" class="calendrier-footer"></td></tr></table>';
        exit();
 
    }
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 22h46   #13
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
La fonction avant adaptation fonctionnait bien, vérifie les lignes que tu as changé, tu as remplacé
Code :
$date = mktime(0, 0, 0, $mois, 1, $annee);
par
Code :
$date = JRequest :: getVar('date', '');
J'imagine que c'est le CMS Joomla, verifie la variable $date est initialisée avant de passer au reste, et initialise-la a defaut par la date du jour.

Code :
1
2
3
 
$datedujour=& JFactory::getDate();
$date = JRequest :: getVar('date', $datedujour->toFormat('%Y-%m-%d'));
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 23h05   #14
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut re : Calendrier gros probleme

La variable date est celle récupérer par la fonction updatelistdate

function updatelistdate(date){
url = 'index2.php?option=com_formation&view=categorie&c=categorie&task=updatelistdate&date='+date;
var myRequest = new Ajax(url,{
method: 'get',
onSuccess: function(responseText) {
$('calendrier').setHTML(responseText);
}}).request();
}

Me semble t'il ?

En faites j'ai bien regarder et il me semble que c'est cette ligne la qui pose problème

$f=date('Y-m-d', $date);
<a href="#" onclick="updatedate(\''.$f.'\')" class="'.$cssClass3.'">'.$i.'</a>

car que je regarde ce qui s'affiche dans le code source à ce niveau la j'ai
<a class="jour3" onclick="updatedate('1970-01-01')" href="#">1</a>

Alors que je me trouve au mois de septembre 2011

Merci encore
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 23h28   #15
Membre confirmé
 
Homme
Développeur informatique
Inscription : avril 2011
Messages : 196
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : avril 2011
Messages : 196
Points : 298
Points : 298
La fonction date en PHP attends comme deuxieme parametre une variable de type time (integer) et non de type string
Code :
1
2
3
4
5
6
7
...
$f=date('Y-m-d', strtotime($date));
...
$j=date("w",strtotime($date))-1; if ($j<0) {$j=6;}
...
$nbjour = date("t",strtotime($date));
...
fab256 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/08/2011, 23h36   #16
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : Calendrier gros probleme

Merciiiiiiiiiiii fab256 c'était effectivement ça le problème !!!


Merci aussi à ce forum !!!
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h23.


 
 
 
 
Partenaires

Hébergement Web