j'ai suivis le tutoriel pour créer un calendrier mais j'ai un problème la table de janvier ne disparaît pas, j'ai aucun bug mais il ne fait disparaitre le mois de janvier lorsque je click sur un autre mois, il reste toujours fixe
voila le code :
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>cal</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
jQuery (function($){
$('.month').hide();
$('.month:first').show();
$('.months a:first').addClass('active');
var current = 1;
$('.months a').click(function(){
var month = $(this).attr('id').replace('linkMonth','');
if(month != current){
$('#month' + current).slideUp();
$('#month'+month).slideDown();
$('.months a').removeClass('active');
$('.months a#linkMonth'+month).addClass('active');
current = month;
}
return false;
});
});
</script>

<link href="style_cal.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
require ('date.php');
$date = new Date();
$year = date('Y');
$dates = $date->getAll($year);
?>
<div class = "periods">
<div class ="year"><?php echo $year; ?> </div>
<div class ="months">
<ul>
<?php foreach ($date->months as $id=>$m): ?>
<li><a href="#" id="linkMonth<?php echo $id+1; ?>"><?php echo utf8_encode(substr(utf8_decode($m),0,3)); ?></a></li>
<?php endforeach ; ?>
</ul>
</div>
<div class="clear"></div>
<?php $dates= current($dates) ; ?>
<?php foreach ($dates as $m => $days): ?>
<div class="month" id="month <?php echo $m ; ?>">
<table>
<head>
<tr>
<?php foreach ($date->days as $d): ?>
<th><?php echo substr($d,0,3) ; ?></th>

<?php endforeach ; ?>
</tr>
</head>
<tbody>
<tr>
<?php $end= end($days); foreach ($days as $d=>$w): ?>
<?php $colspan = $w-1; ?>
<?php if($d==1 && $colspan !=0) : ?>
<td colspan="<?php echo $colspan; ?>" class="padding"></td>
<?php endif ; ?>
<td>
<div class="relative">
<div class="day">
<?php echo $d ; ?>
</div>
</div>
</td>
<?php if($w == 7):?>
</tr><tr>
<?php endif ; ?>

<?php endforeach ; ?>
<?php if ($end !=7) : ?>
<td colspan="<?php echo 7-$end ; ?>" class="padding"></td>
<?php endif ; ?>
</tr>
</tbody>
</table>
</div>
<?php endforeach ; ?>
</div>
<pre><?php print_r($dates); ?></pre>

</body>
</html>

et merci pour votre aide

14 réponses


deadC3LL
Réponse acceptée

Le problème vient de l'ID de tes mois : dans ton html il y a un espace entre "month" et le numéro du mois alors que dans ton javascript il n'y est pas.

Modifie :

<div class="month" id="month <?php echo $m; ?>">

en :

<div class="month" id="month<?php echo $m; ?>">

et ça devrait fonctionner

salut tu peux mettre ton fichier date ici stp je voudrais le recopier pour tester j'ai la flemme de refaire tout le tuto lol

mitoko
Auteur

le voila
<?php
class Date {

var $days = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche',);
var $months = array('Janvier','Février','Mars','Avril','May','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre',);

function getAll($year) {
$r = array();
$date = new DateTime($year. '-01-01');
while ($date-> format ('Y') <= $year) {
$y = $date-> format ('Y');
$m = $date-> format ('n');
$d = $date-> format ('j');
$w = str_replace('0', '7', $date-> format ('w') ) ;
$r$y]$m]$d]=$w;
$date -> add (new Dateinterval('P1D')) ;
}
return $r;
}
}

?>

merci

je viens de tester, j'arrive a reproduire le problème en effet ton code ne change pas de mois, il reste sur janvier. je creuse et je te dit

mitoko
Auteur

oui, c'est exactement le problème, merci de votre effort

je ne vois que ton jquery qui est mal implanté essaye en appelant l'api depuis google. sinon revois le tuto pour voir ou tu aurait pu te planter

mitoko
Auteur

j'ai appelé jquery depuis google mais ça marche pas, et je vais revoir le tuto pour voir si il y a une erreur, merci

Bonsoir, est-ce normal que var $day et $month se termine par une virgule ?
après pour le javascript, mon niveau et trop faible pour t aider. désolé....

mitoko
Auteur

pardon patou, mais j'ai pas compris
j'ai commis une erreur?? vous pouvez m'indiquer ou j'ai commis cette erreur svp!!
merci bcp pour votre réponse :)

Désolé cela pouvait etre une piste, car je ne procede pas de cette façon
pour les lignes

var $days = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche',);
var $months = array('Janvier','Février','Mars','Avril','May','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre',);

mais rasssure toi ton code est valide
sources php.net:
Avoir une virgule après avoir défini la dernière entrée, bien qu'inutile, est une syntaxe valide.

mitoko
Auteur

Désolé pour mon retard, mais ça n'a pas marché, merci beaucoup

bon ben j'ai suivi le tuto pour voir si je parvenais a trouver ton problème et même en repartant de zéro j'arrive au même problème que toi

j'ai tester en coupant le code le problème viens du script javascript mais alors je ne vois pas du tout d'ou désolé mais mes compétences javascript ne vont pas plus loin

mitoko
Auteur

Merci beaucoup pour vos efforts djiins,
deadC3LL merci beaucoup pour votre réponse car c'est la bonne, merci encore une fois vous ma'avez sauver la vie :D

et ben quelle galère pour un si petit détails merci a deadC3LL franchement j'aurais pas trouvé :)