Bonjour,

Voila je rencontre un petit problème avec mon projet. Je dois mettre en place un calendrier de reservation, j'ai suivi le tutoriel sur le site pour créer le calendrier cela fonctionne sans souci.

J'ai essayé de modifier le code pour obtenir un calendrier multi-année et pas uniqument de l'année en cours, mais sans succès =(
J'ai essayé de mettre des boutons pour swtich entre les années/mois mais c'est pas encores cela ^^

Le but:
Un calendrier multi-année qui permet d'afficher depuis la base de données les états des resevation ( Libre, reservé, Refusé).

Abez-vous une idée de comment faire pour modifier le calendrier de Graphikart pour réussire à l'adapter à mes besoins ?

Merci d'avoir prit le temps de lire

Des Bisous =)

3 réponses


Bonjour.
Je ne vois pas où est le problème étant donné que les fonctions getEvents et getAll prennent en argument l'année, il te suffit donc de définir pour qu'elle année tu veux récupérer les évènements et les dates.
Donc dans ton code qui appelle les fonctions, tu peux par exemple faire :

$date = new Date();
$year = isset($_GET['year']) ? $_GET['year'] : date('Y');
$events = $date->getEvents($year);
$dates = $date->getAll($year);
Waljack
Auteur

Bonjour Lartak, Merci de ta réponse. Laisse moi te donner plus de détails.

Voici le calendrier que j'ai actuellement :

[url=http://www.noelshack.com/2016-48-1480662875-calendier-1.png][img]http://image.noelshack.com/minis/2016/48/1480662875-calendier-1.png[/img][/url]

Ce que je voudrai faire c'est comme sur ci-dessous , avoir juste le mois actuel avec l'année actuelle et pouvoir changer de mois et arriver en décembre pouvoir avance et arriver en janvier de l'année d'après.

[url=http://www.noelshack.com/2016-48-1480662875-calendier-2.png][img]http://image.noelshack.com/minis/2016/48/1480662875-calendier-2.png[/img][/url]

Le code actuel pour ajouter une année

function getAllDates($year){
        //Déclaration des varialbes
        $TableauDeDates = array();
        $AnneeSuivante = new DateTime($year.'-01-01');
        $date = new DateTime($year.'-01-01');

        //Ajoute une année en plus à l'année actuel
        $AnneeSuivante->add(new DateInterval('P1Y'));

        while($date->format('Y') <= $AnneeSuivante->format('Y')
        {
            //En mettant n,j et w cela permet d'enlever les 0 initiaux (01.01.2016 => 1.1.2016)
            $y = $date->format('Y');
            $m = $date->format('n');
            $d = $date->format('j');
            $w = str_replace('0','7',$date->format('w'));
            $TableauDeDates[$y][$m][$d] = $w;
            //Permet d'ajouter une periode de 1 jour
            $date->add(new DateInterval('P1D'));
        }
        //Retour du tableau
        return $TableauDeDates; 
    }

Pour afficher la date actuel, j'excute ce code

 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script type="text/javascript">
            jQuery(function($){ var date = new Date(); var current = date.getMonth()+1; 
              $('.month').hide(); $('#month'+current).show(); $('.months a#linkMonth'+current).addClass('active'); 
              $('.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>

Donc voila où j'en suis actuellement .

Merci d'avance =)

Waljack
Auteur

Bonjour, je reviens à la charge.
Voici l'avancé avec mes maigres connaissance en php ^^'

Code de la page calendrier:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Calendrier</title>
        <link rel="stylesheet" type="text/css" href="style.css" />

        <!-- Ajout du Jquery, import depuis google -->
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

        <!-- Scripte Jquerry qui affiche le mois actuel et permet le switch entre les mois -->
        <script type="text/javascript">
            jQuery(function($){ 
                var date = new Date(); 
                var current = date.getMonth()+1; 
                //affichage du mois actuel de l'année actuel + clique pour changer de mois
                $('.month').hide(); 
                $('#month'+current).show(); 
                $('.months a#linkMonth'+current).addClass('active'); 
                $('.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;    
                } 

                //Affichage de l'année suivante
                $('.years a#linkyears').addClass('active');
                $('.years a').click(function(){ var years = $(this).attr('id').replace('linkyears','');

                return false; }) })
        </script>
    </head>

    <body>    
        <?php
            //Ajout des pages de configuration et de la génération de date
            require ('datecalen.php');  
            $date = new Date();
            $annee = date('Y');

            $AnneeSuivante = new DateTime($annee.'-01-01');
            $AnneeSuivante ->add(new DateInterval('P1Y'));
            $dates = $date->GetDates($annee);

        ?>
        <div class="periods">

            <!-- #################### Année #####################-->
            <div class="Annee">
                <?php foreach ($date->years as $id=>$y):?>
                    <a href="#" id="linkyears<?php echo $id; ?>"><?php echo utf8_encode(substr(utf8_decode($y),0,4 )); ?></a>
                <!--<li><a href="#"> <?php echo $y ;?> </a></li>-->
                <?php endforeach;?>
            </ul>

            <!-- Retour à la ligne -->
            <?php echo nl2br("\n");?>

            <!-- Affichage de l'année actuel et de l'année suivante -->
            <?php echo $annee;?>
            <?php echo $y = $AnneeSuivante->format('Y');?>
            </div>

            <!-- #################### MOIS #####################-->
            <div class="months">
                    <ul>                    
                        <?php foreach ($date->months as $id=>$m): ?>

                              <!-- Il faut décoder l Utf8 car la fonction utilise l'ascii et ensuite il faut rencoder en utf8 car le charset de la page est en utf8 -->
                             <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>

            <!-- #################### Case du calendrier #####################-->
            <div class="clear"></div>
            <?php $dates = current($dates);?>
            <?php foreach ($dates as $m=>$days) : ?>
                <div class="month relative" id ="month<?php echo $m; ?>">
                <table>

                    <!-- Ensemble des jours de la semaine (Lun-Dim) -->
                    <thead>
                        <tr>
                            <?php foreach ($date->days as $d): ?>
                                <th><?php echo substr($d,0,3); ?></th>
                           <?php endforeach; ?>
                        </tr> 
                    </thead>

                    <!-- Parcrourir le tableau pour les jour de la semaine (1. 2. 3 ...) -->
                    <tbody>
                    <tr>
                        <?php $end = end($days); foreach($days as $d=>$w): ?>

                            <!-- Insertion de case vide si le premier jour n'est pas lundi -->
                            <?php if($d == 1  && $w != 1): ?>
                                 <td colspan="<?php echo $w-1; ?>" class="padding"></td>
                            <?php endif; ?>

                            <!--Mise en forme CSS avec la classe relative-->
                            <td>
                                <div class="relative">
                                    <div class="day"><?php echo $d?></div>
                                </div>
                            </td>
                            <!-- Retour à la ligne c'est dimanche -->
                            <?php if($w == 7): ?>
                            </tr><tr>
                           <?php endif; ?>

                        <?php endforeach;?>

                         <!-- ajout des casses vide après le dernierjour du mois -->
                        <?php if($d != 7): ?>
                                <td colspan="<?php echo 7-$end; ?>" class="padding"></td>
                        <?php endif; ?>

                        </tr>
                    </tbody>

                </table>
                </div>

            <?php endforeach; ?>

        </div>

    </body>

</html>

Code de la page date :

<?php 
class Date{

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

    function GetDates($annee)
    {
        //Déclaration des variables
        $TableauDate = array();

        $date = new DateTime($annee.'-01-01');
        $AnneeSuivante = new DateTime($annee.'-01-01');

        $AnneeSuivante ->add(new DateInterval('P1Y'));

        while($date->format('Y') <= $AnneeSuivante->format('Y')){
            //En mettant n,j et w cela permet d'enlever les 0 initiaux (01.01.2016 => 1.1.2016)
            $y = $date->format('Y');
            $m = $date->format('n');
            $d = $date->format('j');
            $w = str_replace('0','7',$date->format('w'));
            $TableauDate[$y][$m][$d] = $w;
            //Permet d'ajouter une periode de 1 jour
            $date->add(new DateInterval('P1D'));
        }

        return $TableauDate;    
    }

}

?>

La grande question est la suivante :

Comment faire pour que lorsque je clique sur Suiv , cela me fait venir l'année suivante au mois de janvier ?

Dans mon code, je n'ai pas réussi à rendre clickable les dates ( actuel et suivante).

Je pense que je ne suis pas trop loin... =P

Merci d'avoir pris le temps de lire =)
Des bisous