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 ? :)
Bonsoir, voici pour vous Ce calendrier utilisant un moteur de template créer de mais main, à priori aucun bug !
Bonjour,
Un conseil très important. "Il ne faut jamais mettre d'accent dans le nom d'une variable".
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>
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>
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));
ç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';
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.
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 ?
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 !
Dac merci beaucoup, puis je vous le piquer ? Comment je peux l'adapter en modèle MVC ?
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');
}
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 ;)
Bonjour Elodie, effectivement gros soucis.. Je vais voir ce que je peux faire.
Cordialement.