Bonjour,
J'ai suivi le tuto "Créer un calendrier" mais j'aimerais savoir comment était-il possible de générer le calendrier sur 1 an à partir de la date courante et ce chaque mois ?
Par ex :
du 01 novembre 2012 (mois actuel) au 31 octobre 2013
du 01 décembre 2012 au 30 novembre 2013
Chaque mois, le calendrier se réactualise.
Comment faire pour que les mois après décembre 2012 reprennent à Janvier 2013?
Merci d'avance pour vos réponses !
Ce n'est pas parfait mais tu peux t'y référer http://pastebin.com/9JHMcaCh
Ligne 80 :
On range dans data-year l'année du mois traité
data-year="<?php echo $year; ?>"
Ligne 19 :
On va rechercher cette valeur pour l'afficher dans la div correspondante
$('body>div.year').html($('#month'+month).data('year'));
Ce qui donne :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Calendrier</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src='http://code.jquery.com/jquery-1.8.3.min.js'></script>
<script type="text/javascript">
jQuery(function($){
$('.month').hide();
$('#month<?php echo date('n');?>').show();
$('#linkMonth<?php echo date('n');?>').addClass('active');
var current = <?php echo date('n');?>;
$('.months a').click(function(){
var month = $(this).attr('id').replace('linkMonth','');
if(month != current){
$('#month'+current).slideUp();
$('#month'+month).slideDown();
$('body>div.year').html($('#month'+month).data('year'));
$('.months a').removeClass('active');
$('#linkMonth'+month).addClass('active');
current = month;
}
return false;
});
});
</script>
</head>
<body>
<?php
$months = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
$weeks = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
function getYear($time) {
$r = array();
$date = strtotime(date($time));
//structure tbl $r[annee][mois][JOUR] = JOUR DE LA SEMAINE;
while($date <= strtotime('+1 Year')) {
$y = date('Y', $date);
$m = date('n',$date);
$d = date('j',$date);
$w = date('w',$date);
$r$y]$m]$d] = $w;
$date += (24*60*60);
}
return $r;
}
$calendar = getYear(date('Y-m-01'));
$year = key($calendar);
?>
<div class="year">
<?php echo $year;?>
</div>
<div class="months">
<ul>
<?php
//Affichage month
foreach($months as $k=>$v) {
if($k >= date('n')-1) {
echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
}
}
foreach($months as $k=>$v) {
if($k <= date('n')-(12-date('n')+1)) {
echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
}
}
?>
</ul>
</div>
<div class='clear'></div>
<?php
foreach($calendar as $year=>$mois) {
foreach ($mois as $m=>$days) {
?>
<div data-year="<?php echo $year; ?>" id="month<?php echo $m; ?>" class="month">
<table>
<thead>
<?php
foreach($weeks as $v) {
echo "<th>".$v."</th>";
}
?>
</thead>
<tbody>
<tr>
<?php
foreach($days as $d=>$w) {
if($d==1 && $w != 0) {
echo "<td colspan='".($w)."' class='padding'></td>";
}
if(date('Y')==$year && date('n')==$m && date('j')==$d) {
echo "<td class='today'>$d</td>";
} else {
echo "<td>$d</td>";
}
if($w==6) {
echo "</tr><tr>";
}
}
?>
</tr>
</tbody>
</table>
</div>
<?php }} echo "<pre>";print_r($calendar);?>
</body>
</html>
Excusez moi de vous déranger, mais dans le cas où le calendrier est généré sur un an, comment fait-on pour que 2013 remplace 2012 quand on clique sur Janvier ?
Merci d'avance,
Merci beaucoup,
Parcontre, ça ne marchait pas tout de suite, j'ai essayé, et j'ai trouvé qu'il fallait écrire:
$('.year').html("<p>" + $('#month'+month).data('year') + "</p>");
Bonsoir !!
Comment fait-on si l'on veut rajouter les numéros de semaines?
Pour l'instant, j'ai ajouté au tableau un :
$nw = date('W', $date)
$data$y]$m]$d]$nw] = $w;
Par contre pour l'insérer dans le calendrier, faut-il faire un foreach?
Merci d'avance,
Salut,
oui il faut rajouter dans les foreach.
c'est pas parfait pour certaines dernières semaines (faut rajouter des colspans)
(au passage le '<p>' que tu avais rajouté, sans ça marche très bien chez moi..?)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Calendrier</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src='http://code.jquery.com/jquery-1.8.3.min.js'></script>
<script type="text/javascript">
jQuery(function($){
$('.month').hide();
$('#month<?php echo date('n');?>').show();
$('#linkMonth<?php echo date('n');?>').addClass('active');
var current = <?php echo date('n');?>;
$('.months a').click(function(){
var month = $(this).attr('id').replace('linkMonth','');
if(month != current){
$('#month'+current).slideUp();
$('#month'+month).slideDown();
$('body>div.year').html($('#month'+month).data('year'));
$('.months a').removeClass('active');
$('#linkMonth'+month).addClass('active');
current = month;
}
return false;
});
});
</script>
</head>
<body>
<?php
$months = array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
$weeks = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
function getYear($time) {
$r = array();
$date = strtotime(date($time));
//structure tbl $r[annee][mois][JOUR] = JOUR DE LA SEMAINE;
while($date <= strtotime('+1 Year')) {
$y = date('Y', $date);
$m = date('n',$date);
$d = date('j',$date);
$w = date('w',$date);
$W = date('W',$date);
$r$y]$m]$d] = array('w' => $w, 'W' => $W);
$date += (24*60*60);
}
return $r;
}
$calendar = getYear(date('Y-m-01'));
$year = key($calendar);
?>
<div class="year">
<?php echo $year;?>
</div>
<div class="months">
<ul>
<?php
//Affichage month
foreach($months as $k=>$v) {
if($k >= date('n')-1) {
echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
}
}
foreach($months as $k=>$v) {
if($k <= date('n')-(12-date('n')+1)) {
echo "<li><a href='#' id='linkMonth".($k+1)."'>".utf8_encode(substr(utf8_decode($v),0,3))."</a></li>";
}
}
?>
</ul>
</div>
<div class='clear'></div>
<?php
foreach($calendar as $year=>$mois) {
foreach ($mois as $m=>$days) {
?>
<div data-year="<?php echo $year; ?>" id="month<?php echo $m; ?>" class="month">
<table>
<thead>
<?php
foreach($weeks as $v) {
echo "<th>".$v."</th>";
}
echo "<th>Week</th>";
?>
</thead>
<tbody>
<tr>
<?php
foreach($days as $d=>$w) {
if($d==1 && $w'w'] != 0) {
echo "<td colspan='".($w'w'])."' class='padding'></td>";
}
if(date('Y')==$year && date('n')==$m && date('j')==$d) {
echo "<td class='today'>$d</td>";
} else {
echo "<td>$d</td>";
}
if($w'w']==6) {
echo "<td>".$w'W']."</td>";
echo "</tr><tr>";
}
}
?>
</tr>
</tbody>
</table>
</div>
<?php }} echo "<pre>";print_r($calendar);?>
</body>
</html>