Bonjour à tous,

J'ai suivi un tuto sur un site pour réaliser un calendrier dynamique en PHP. C'est plutôt pas mal si on met de côté quelques petits soucis. Certains caractères ne s'affichent pas correctement. Les mois qui devraient être masqués sont tous visibles et l'animation qui affiche le mois demandé ne fonctionne pas bien. Et lorsque le dimanche tombe un 6 le chiffre 7 sort du tableau à droite alors qu'il devrait revenir à la ligne et se fixer au lundi. Ci-dessous tous les éléments.

<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>
<?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 substr($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="months" id="month<?php echo $m; ?>">
            <table>
                <thead>
                    <tr>
                        <?php foreach ($date->days as $d): ?>
                            <th><?php echo substr($d,0,3); ?></th>
                        <?php endforeach; ?>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <?php $end = end($days); foreach ($days as $d=>$w): ?>
                            <?php if($d == 1): ?>
                                <td colspan="<?php echo $w-1; ?>"></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; ?>"></td>
                        <?php endif; ?>
                    </tr>
                </tbody>
            </table>
        </div>
    <?php endforeach; ?>
</div>

Je vous aurais bien posté une capture d'écran du rendu mais pas possible de publier des images...

1 réponse


Bonjour,

  • Conernant les animations, il s'agit d'un problème de classe. Tu dois retirer le 's' de month dans le foreach.
  • Pour le décalage, c'est du au colspan="0" que tu obtiens quand $w vaut 1, à eviter (lire doc). Compléter la condition résout le problème: if($d == 1 && $w !=1).
  • Pour l'affichage des caractères, c'est peut être du à ton encodage.

    Sans la classe "Date" qui est dans le cas présent facile à trouver, pas facile de t'aider essaie de poster l'ensemble du problème la prochaine fois.

    Bon code.