Bonsoir le forum,

Voilà, je viens de suivre le tutoriel pour faire le calendrier ( ici).
J'en suis arrivée à la 41 ème minute environ et je rencontre des difficultés:

Lorsque j'ai un event, je clique sur le mois mais il n'y a pas la balise <li> qui s'affiche le jour où est enregistré l'event.

J'ai juste modifié dans phpmyadmin, le type du champ date en le passant en DATETIME. Es-ce que cela change quelque chose ou pas ?

Voici le code que j'obtiens:

<?php $end = end ($jours) ;
                                  foreach ($jours as $d=>$w){
                                      $time = strtotime($année-$m-$d);?>

                            <?php if ($d ==1 && $w != 1){ ?>
                            <td colspan="<?php echo $w-1; ?>"></td>
                            <?php } ?>
                                <td>
                                    <div class="day"><?php echo $d; ?></div>

                                    <ul class="events">
                                        <?php

                                        if (isset($event$time])){
                                             ?>
                                                <li><?php echo $e; ?></li> 
                                           <?php 
                                        } ?>
                                    </ul>
                                </td>

J'ai remplacé la variable $year par $année, ce sont les seuls modifications que j'ai effectué et je ne comprends pas :(
Pouvez- vous m'aider svp ? :)

25 réponses


Bonjour,

Un conseil très important. "Il ne faut jamais mettre d'accent dans le nom d'une variable".

ARAGORN
Auteur

Bonjour,

Même en enlevant l'accent à la variable, l'event ne s'affiche pas :(

Bonjour

<?php $end = end($days); foreach($days as $d=>$w): ?>
                           <?php $time = strtotime("$year-$m-$d"); ?>
                           <?php if($d == 1 && $w != 1): ?>
                                <td colspan="<?php echo $w-1; ?>" class="padding"></td>
                           <?php endif; ?>
                           <td<?php if($time == strtotime(date('Y-m-d'))): ?> class="today" <?php endif; ?>>
                                <div class="relative">
                                    <div class="day"><?php echo $d; ?></div>
                                </div>
                               <div class="daytitle">
                                   <?php echo $date->days$w-1]; ?> <?php echo $d; ?> <?php echo $date->months$m-1]; ?>
                               </div>
                               <ul class="events">
                                   <?php if(isset($events$time])): foreach($events$time] as $e): ?>
                                        <li><?php echo $e; ?></li>
                                   <?php endforeach; endif; ?>
                               </ul>
                           </td>
ARAGORN
Auteur

Cela ne me retourne rien, j'ai donc fait un print_r de la variable $events$time] et j'obtiens cette erreur:

Undefined offset: 49979485 in C:\wamp\www\graph\vue\planning\index.php on line 75

Pourriez-vous me donnée le code complet de votre index.php que je jette un coup d'oeil ?

PS: Tentez le code index.php identique à celui du tutoriel, je me suis amusée à le faire dans la soiré :

<!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" />
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.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>
    </head>
    <body>
        <?php
        require('config.php'); 
        require('date.php');
        $date = new Date();
        $year = date('Y');
        $events = $date->getEvents($year);
        $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 relative" 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 $time = strtotime("$year-$m-$d"); ?>
                           <?php if($d == 1 && $w != 1): ?>
                                <td colspan="<?php echo $w-1; ?>" class="padding"></td>
                           <?php endif; ?>
                           <td<?php if($time == strtotime(date('Y-m-d'))): ?> class="today" <?php endif; ?>>
                                <div class="relative">
                                    <div class="day"><?php echo $d; ?></div>
                                </div>
                               <div class="daytitle">
                                   <?php echo $date->days$w-1]; ?> <?php echo $d; ?> <?php echo $date->months$m-1]; ?>
                               </div>
                               <ul class="events">
                                   <?php if(isset($events$time])): foreach($events$time] as $e): ?>
                                        <li><?php echo $e; ?></li>
                                   <?php endforeach; endif; ?>
                               </ul>
                           </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>
        <div class="clear"></div>
        <pre><?php print_r($events); ?></pre>
    </body>
</html>
ARAGORN
Auteur

J'ai suivit aussi le code du tuto en l'adaptant dans la methode MVC:

Le controller:

include_once '/../../class/planning.php';
    include_once '/../../class/membre.php';

    $planning = new Planning();
    $annee = date('Y');
    $event = $planning->get_events($annee);
    $dates = $planning->getAll($annee);

    include_once '/../../vue/planning/index.php';

Et la vue:

<div class="periods">
    <div class="année">
        <?php echo $annee; ?>
    </div>
    <div class="months">
        <ul>
             <?php foreach ($planning->mois as $id=>$m){ ?>

                 <li><a href="#" id="lienMois<?php echo $id+1; ?>"><?php echo utf8_encode(substr(utf8_decode($m),0,3)); ?></a></li>
                 <?php }
             ?>
        </ul> 
    </div>

    <?php $dates = current($dates); 
            foreach ($dates as $m=>$jours){ ?>
            <div class="month" id="month<?php echo $m; ?>">
                <table>
                    <thead>
                        <tr>
                            <?php foreach ($planning->jours as $d){ ?>
                            <th>
                               <?php echo substr($d,0,3) ; ?>
                            </th>    
                           <?php } ?>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <?php $end = end ($jours) ;
                                  foreach ($jours as $d=>$w){
                                      $time = strtotime($annee-$m-$d);?>

                            <?php if ($d ==1 && $w != 1){ ?>
                            <td colspan="<?php echo $w-1; ?>"></td>
                            <?php } ?>
                                <td>
                                    <div class="day"><?php echo $d; ?></div>

                                    <ul class="events">
                                        <?php

                                        if (isset($event$time])){
                                            foreach ($event$time] as $e){
                                             ?>
                                                <li><?php echo $e; ?></li> 
                                           <?php 
                                        }
                                        }?>
                                    </ul>
                                </td> 

                                <?php 
                                if ($w == 7){ ?>
                        </tr>
                        <tr>
                                <?php }
                             } 
                             if ($end != 7){ ?>
                                 <td colspan="<?php echo 7-$end; ?>"></td>
                             <?php }
                             ?>
                        </tr>
                    </tbody>
                </table>
            </div>
            <?php }
    ?>
</div>
<?php 

echo $event$time];

Et la classe:

class Planning {

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

    public static function getAll ($annee){

        $r = array();

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

        while ($date->format('Y') <= $annee){

            $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;
    }

    public static function get_events($year){
        include_once 'sql.php';
        $query = $bdd->prepare('SELECT * FROM planning WHERE YEAR(date) = :annee');
        $query->execute(array(
            'annee' => $year,
        ));
        $event = array();

        while ($evenement = $query->fetch(PDO::FETCH_OBJ)){
            $event[strtotime($evenement->date)]$evenement->id] = $evenement->client;
        }

        return $event;
    }
}
$query->execute(array(
            'annee' => $year,
        ));

par

$query->execute(array('annee' => $year));
ARAGORN
Auteur

ça revient à la même chose, c'est juste que ma syntaxe est plus lisible ^^
et cela ne change rien :/

Ah mince alors... d'où cela peux t'il venir ^^, je vais chercher de fonte en combe le code et vous en redire des nouvel :)

<?php
public static function get_events($database, $year){
    $bdd = $database;
    $query = $bdd->prepare('SELECT * FROM planning WHERE YEAR(date) = :annee');
    $query->execute(array(
       'annee' => $year,
    ));

    $event = array();

    while ($evenement = $query->fetch(PDO::FETCH_OBJ)){
        $event[strtotime($evenement->date)]$evenement->id] = $evenement->client;
    }

    return $event;
}

Le controller :

include_once '/../../class/planning.php';
include_once '/../../class/membre.php';
//DATABASE
include_once '/../../class/db.php';
$planning = new Planning();
$annee = date('Y');
$event = $planning->get_events($db, $annee);
$dates = $planning->getAll($annee);

include_once '/../../vue/planning/index.php';
ARAGORN
Auteur

Cela ne va rien changer puisque les requêtes sortant de la base sont bonnes, lorsque je fait un print_r de la variable $event$time], ça me retourne une erreur que j'ai mise au dessus

Undefined offset: 49979485 in C:\wamp\www\graph\vue\planning\index.php on line 75

Pour moi la variable contient bien quelque chose, sinon il y aurait l'erreur undenefied variable $event$time] :(
Donc je comprends pas trop ^^

JE pense que ses la fonction date(); qui bug, car la je vous avoue ne pas comprendre non plus ^^

L'erreur proviens de toute évidence du DateTime();
Regarde ici, et de mon côté je vais tenter de vous recréer ceci en modèle MVC.

ARAGORN
Auteur

Bon j'ai fait un peu de debug,

La variable event est bien remplit dans mon controller mais pas event$time] enfin si vu qu'elle me retourne l'erreur que j'ai cité tout à l'heure, sauf que les chiffres qui surviennent après le numéro changent tout le temps. Cela correspond à quoi ? Au timestamp que l'on a crée ?

ARAGORN
Auteur

Bonsoir,

Je ne comprends pas trop comment manier votre template, pouvez-vous m'éclairer un peu, surtout sur la partie de quel fichiers je dois modifier ^^

Le fichier qui ce trouve dans core/config.php vous devez le modifier, dans le dossier template/layouts vous y trouver un fichier "default.php", ses la où vous changer le stylisme de votre propre calendrier :)

Je vais vous faire une petite vidéo d'explication ça serra plus compréhensible !

ARAGORN
Auteur

Dac merci beaucoup, puis je vous le piquer ? Comment je peux l'adapter en modèle MVC ?

ARAGORN
Auteur

Merci beaucoup :)
Pour l'adapter en mode MVC, je peux faire comment ?

Actuellement il utilise un système de template, donc vous pouvez si vous le souhaitez en faire un système de multipage :
index.php :

if(isset($_GET'page'] && preg_match('/^[a-z0-9]+$/i', $_GET'page'])) {
    $page_name = strtolower($_GET'page']);
    if(file_exists('template/pages'.$page_name.'.php')) {
        $tpl->output($page_name);
    } else {
       $tpl->output('404');
    }
} else {
    $tpl->output('index');
}
ARAGORN
Auteur

Bonjour,

Je réponds un peu tardivement mais franchement je vous remercie beaucoup pour votre aide, la vidéo m'a permit d'un peu mieu comprendre et je suis arrivé à mes fin sur ce calendrier après pas mal m'être tiré les cheveux ^^

merci pour le temps que vous m'avez accorder pour résoudre mon soucis en tout cas :)

Bonne continuation ;)

S'été avec plaisir :)

Bonne continuation à vous.

Cordialement Jessy L.

Bonjour, le lien de ForZ3ro ne fonctionne plus pour voir la video.

Bonjour Elodie, effectivement gros soucis.. Je vais voir ce que je peux faire.

Cordialement.