Précédent   Forum des professionnels en informatique > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
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 08/08/2007, 22h53   #1
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Par défaut Améliorer un calendrier

Bonjour.

J'avais besoin d'un calendrier où l'on peut récupérer une date sélectionnée et j'avais récupéré celui-ci :
http://php.developpez.com/sources/?page=dates#calendar
Ce script permet d'afficher un calendrier mais pas de sélectionner une date.
Donc après avoir planché un bon moment sur le sujet je l'ai rendu cliquable et on peut donc récupérer la date sélectionnée.

Seul petit soucis : le calendrier revient au mois en cours quand on a sélectionné une date.
Donc si quelqu'un peut encore l'améliorer ...
le code :
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
<BODY>
<?php
//Creating general vars
$year = date("Y");
if(!isset($_GET['month'])) $monthnb = date("n");
else {
    $monthnb = $_GET['month'];
    $year = $_GET['year'];
    if($monthnb <= 0) {
        $monthnb = 12;
        $year = $year - 1;
    }
    elseif($monthnb > 12) {
        $monthnb = 1;
        $year = $year + 1;
    }
}
$day = date("w");
$nbdays = date("t", mktime(0,0,0,$monthnb,1,$year));
$firstday = date("w",mktime(0,0,0,$monthnb,1,$year));
 
//Replace the number of the day by its french name
$daytab[1] = 'Lu';
$daytab[2] = 'Ma';
$daytab[3] = 'Me';
$daytab[4] = 'Je';
$daytab[5] = 'Ve';
$daytab[6] = 'Sa';
$daytab[7] = 'Di';
 
//Build the calendar table
$calendar = array();
$z = (int)$firstday;
if($z == 0) $z =7;
for($i = 1; $i <= ($nbdays/5); $i++){
    for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
        if($j < $z && ($j-$z+1+(($i*7)-7)) <= 0){
                $calendar[$i][$j] = null;
        }
        else {
            $calendar[$i][$j] = $j-$z+1+(($i*7)-7);            
        }
    }
}
 
//Replace the number of the month by its french name
switch($monthnb) {
    case 1: $month = 'Janvier'; break;
    case 2: $month = 'Fevrier'; break;
    case 3: $month = 'Mars'; break;
    case 4: $month = 'Avril'; break;
    case 5: $month = 'Mai'; break;
    case 6: $month = 'Juin'; break;
    case 7: $month = 'Juillet'; break;
    case 8: $month = 'Août'; break;
    case 9: $month = 'Septembre';    break;
    case 10: $month = 'Octobre'; break;
    case 11: $month = 'Novembre';    break;
    case 12: $month = 'Décembre';    break;
}
?>
<div id="calendrier" align="center">
    <table border=1 style="background-color:e0e0e0" cellpadding=0 cellspacing=0 width="160px" style="font-size:11px">
        <tr>
            <td><a href="index.php?page=test&month=<?php echo $monthnb - 1; ?>&year=<?php echo $year; ?>" style="text-decoration:none"><<</a></span></td>
            <td colspan="5"><?php echo($month.' '.$year);  ?></th>
            <td><a href="index.php?page=test&month=<?php echo $monthnb + 1; ?>&year=<?php echo $year; ?>" style="text-decoration:none">>></a></span></td>
        </tr>
        <?php
            echo('<tr>');
            for($i = 1; $i <= 7; $i++){
                echo('<td>'.$daytab[$i].'</td>');
            }
            echo('</tr>');
            for($i = 1; $i <= count($calendar); $i++) {
                echo('<tr>');
                for($j = 1; $j <= 7 && $j-$z+1+(($i*7)-7) <= $nbdays; $j++){
                    if($j-$z+1+(($i*7)-7) == date("j") && $monthnb == date("n") && $year == date("Y")) echo '<td align="right"><a href="index.php?page=test&jour='.$calendar[$i][$j].'&mois='.$monthnb.'&an='.$year.'" style="text-decoration:none">'.$calendar[$i][$j].'</a></td>';
                    else echo '<td align="right"><a href="index.php?page=test&jour='.$calendar[$i][$j].'&mois='.$monthnb.'&an='.$year.'" style="text-decoration:none">'.$calendar[$i][$j].'</td>';
 
//                    if($j-$z+1+(($i*7)-7) == date("j") && $monthnb == date("n") && $year == date("Y")) echo('<td align="right" onclick="afficher_date(this.firstChild.nodeValue);" style="cursor:pointer">'.$calendar[$i][$j].'</td>');
//                    else echo('<td align="right" onclick="javascript:afficher_date(this.firstChild.nodeValue)" style="cursor:pointer">'.$calendar[$i][$j].'</td>');
                }
                echo('</tr>');
            }
        ?>
    </table>
</div>
<?php 
if (isset($_GET['jour']))  $jour=$_GET['jour']; else $jour = "";  
if (isset($_GET['mois']))  $mois=$_GET['mois']; else $mois = "";
if (isset($_GET['an']))  $an=$_GET['an']; else $an = "";
if (!empty($jour)){
	if ($jour < 10){
		$jour = "0$jour";
	}
	if ($mois < 10){
		$mois = "0$mois";
	}
echo "<p align='center'>$jour-$mois-$an";
}
?>
Dans mon exemple j'utilise include, il faudra donc adapter le code pour
Code :
<a href="index.php?page=test ...
utilisé à différents endroit dans le code.

Voilà chez moi ça marche, donc j'espère que vous pourrez l'utiliser sans problème.
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 12h55   #2
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
je dirais de creer une ptite variable de session avec la dateselectionné.

Et lors de l'affichage de ce dernier de faire un test sur cette date au lieu de faire un test sur un variable date selectionné a un moment donné.
__________________
Pour me faire grandir
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h14   #3
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
D'abord merci.
Ok pour cette proposition.
Citation:
Envoyé par zulot
je dirais de creer une ptite variable de session avec la dateselectionné.
Là je vois pas bien :
Citation:
Envoyé par zulot
Et lors de l'affichage de ce dernier de faire un test sur cette date au lieu de faire un test sur un variable date selectionné a un moment donné.
Où faire ce test ?
Une petite explication ou un bout de code
philippef est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h45   #4
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
J'ai pas regardé le code du calendrier mais ils fonctionnent à peu près tous pareil.

Pour afficher le calendrier sur le mois en cours (fonction par default) il doit y avoir un endroit ou ca test la date et affiche le calendrier sur ce mois par defaut (le mois en cours)

et bien tu trouves ce petit morceau de code et tu rajoutes le test
Si j'ai ma variable de session alors j'affiche le mois et l'annee de la date choisis de la variable de session
__________________
Pour me faire grandir
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h53   #5
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
bon oublie tout ce que j'ai dis j'ai matté le code et le fonctionnement du calendrier.

Tu as quelques lignes a changer dans ton code seulement.

le lien cliquable :
Code :
1
2
 
else echo '<td align="right"><a href="index.php?page=test&jour='.$calendar[$i][$j].'&month='.$monthnb.'&year='.$year.'" style="text-decoration:none">'.$calendar[$i][$j].'</td>';

La recupération des variables :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php 
if (isset($_GET['jour']))  $jour=$_GET['jour']; else $jour = "";  
if (isset($_GET['month']))  $mois=$_GET['month']; else $mois = "";
if (isset($_GET['year']))  $an=$_GET['year']; else $an = "";
if (!empty($jour)){
	if ($jour < 10){
		$jour = "0$jour";
	}
	if ($mois < 10){
		$mois = "0$mois";
	}
echo "<p align='center'>$jour-$mois-$an";
}
?>
Bon par contre ce que je conseillerais mais la faut changer enormement de code.

C'est de supprimer le système par GET, de le remplacer par du post qui charge dans des SESSION, comme ca si tu changes de pages dans ton site tu auras toujours la date choisis et l'affichage du mois.
__________________
Pour me faire grandir
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 02h27   #6
Membre confirmé
 
Inscription : mars 2003
Messages : 674
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 674
Points : 242
Points : 242
Bon j'ai modifié le lien comme tu le proposes. J'ai remplacé :
- jour par day
- mois par month
- an par year.

et maintenant le mois et l'année restent affichés quand on clique sur un jour.

Je ne sais pas si c'est vraiment utile mais je n'ai pas modifié GET par POST.

Je crois que le tuto de 10-Nice peut être complété par les modifications apportées qui sont plus utiles que le simple affichage d'un calendrier.

Zulot soit ici remercié de ton aide.
philippef 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 10h45.


 
 
 
 
Partenaires

Hébergement Web