tutoriel - créer un calendrier

Par mitoko, il y a 13 ans


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

Djiins, il y a 13 ans

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, il y a 13 ans

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

Djiins, il y a 13 ans

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, il y a 13 ans

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

Djiins, il y a 13 ans

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, il y a 13 ans

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

patou, il y a 13 ans

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, il y a 13 ans

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 :)

patou, il y a 13 ans

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, il y a 13 ans

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

Djiins, il y a 12 ans

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

deadC3LL, il y a 12 ans

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

mitoko, il y a 12 ans

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

Djiins, il y a 12 ans

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