Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
Je suis novice en php, j'ai réussi à créer une fonction qui me crée un calendrier avec en paramètre l'année et le mois.
J'arrive à le faire boucler pour l'avoir comme je veux, CAD un tableau 4x4 affiché sur la page principale.
Le seul hic qui me reste est que mon tableau ne boucle que jusqu'à la fin de l'année en cours au lieu de faire les 12 mois...
Exemple : je commence en Avril, il va me créer 9 tableaux, soit jusque Décembre, alors qu'il devrait continuer jusque Mars de l'année suivante.
Voici la fonction que j'utilise pour générer le tableau sachant qu'outre la partie "graphique" que j'ai dans la page principale, même la ligne "<pre><?php print_r($dates); ?></pre>" s'arrête au mois de Décembre.
Je pense que le problème vient de l'indentation de la nouvelle année, remise à Janvier du mois et année +1, mais je ne sais pas comment le corriger.
La page fonction :
var $days = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
function getAll($month, $year)
{
$r = array();
$date = strtotime($year.'-'.$month.'-01');
//Boucle sur 12 mois
for($i = 1, $mm = $month, $yy = $year; $i < 13; $i++, $mm++)
{
$countit = 0;
//Arrivé en Décembre, on remet le mois à Janvier pour parcourir les 12 mois et on incrémente l'année
if($mm > 12)
{
$mm = 1;
$yy++;
$date = strtotime($yy.'-'.$mm.'-01');
}
while(date('n', $date) == $mm)
{
$countit = $countit + 1;
//Ce que je veux >> $r[ANNEE][MOIS][JOUR] = JOUR DE LA SEMAINE
$y = date('Y', $date);
$m = date('n', $date);
$d = date('j', $date);
$n = date('N', $date);
$r[$y][$m][$d] = $n;
//Rajoute 1 jour à la date
$date = strtotime(date('Y-m-d', $date).' +1 DAY');
}
echo "itération = ".$countit." ";
}
return $r;
}
}
?>
Désolé si l'affichage du code ne s'est pas mis correctement, j'ai vraiment pas l'habitude de poster sur des forums
Si quelqu'un a une idée, je suis preneur ^^
Merci d'avance
Dernière modification par Eladan (09-03-2015 13:17:57)
Hors ligne
Bonjour,
J'ai testé votre code et il me semble fonctionner correctement...
J'ai appelé la fonction comme ceci : $result = getAll('3', '2013'); (donc mois = Mars et année = 2013)
Et en faisant un var_dump de $result, j'ai bien un tableau "2013" qui contient 10 tableaux des mois mars à décembre, ainsi qu’un tableau "2014" qui contient deux tableaux pour les mois janvier et février.
Je ne comprends dons pas votre problème
Hors ligne
Bonjour,
Merci de vous être penché dessus.
Oui après plusieurs tests, le problème ne vient pas de la fonction (je pensais à la base) mais du code de la page principale.
J'ai retiré tout ce qui est traitement interne pour ne laisser que l'affichage du tableau ce qui donne :
//Parcours les mois de l'année
foreach($dates as $m=>$days){
//Incrémentation du mois pour retour à la ligne
$returnligne = $returnligne + 1;
<td align="left" valign="top"><?php echo $months[$m]." ".$year; ?>
<table align="center" border="1" bordercolor="#FF0000" cellpadding="2" cellspacing="0">
<thead>
<tr><?php
foreach($date->days as $d){
//Affiche les jours de la semaine ?>
<th align="center" valign="middle" bgcolor="#A9B4B3"><?php echo substr($d, 0, 2); ?></th><?php
} ?>
</tr>
</thead>
<tbody>
<tr><?php
//Récupère la valeur du dernier jour du mois
$end = end($days);
//Parcours les jours de la semaine
foreach($days as $d=>$w){
//Met le premier du mois au bon jour de semaine
if($d == 1){
if($w != 1){ ?>
<td colspan="<?php echo $w-1; ?>"></td><?php
}
}
?><td align="center" valign="middle"><?php echo $d; ?></td><?php }
//Saut de ligne arrivé à la fin de la semaine
if($w == 7){ ?>
</tr><tr><?php
}
}
//On termine le tableau avec 7 colonnes
if($end != 7){ ?>
<td colspan="<?php echo 7-$end; ?>"</td><?php
} ?>
</tr>
</tbody>
</table><?php
//Saut de ligne arrivé tous les 4 mois
if(($returnligne == 4) || ($returnligne == 8)){ ?>
</td>
</tr><tr><?php
}
} ?>
</td>
</tr>
</table>
Quand je fait un <pre><?php //print_r($dates); ?></pre> juste après l'appel de ma fonction, j'ai bien l'ensemble de mon tableau, CAD les 12 mois.
Mais quand je le met après la ligne $dates = current($dates); le tableau s'arrête en Décembre peut importe le mois de début.
Si je retire carrément la ligne, plus rien ne fonctionne. Comme si php ne savait plus ce qu'il devait rechercher.
Hors ligne
Bonjour,
C'est bon, j'ai fini par trouver, c'est une mauvaise interprétation de lecture du tableau qui me bloquais.
J'ai corrigé le tout et ça fonctionne.
Bon courage à tous ceux qui code
Hors ligne
Pages :: 1