Bonjour,
Je voudrai vous remercier pour le tutoriel sur le calendrier => http://www.grafikart.fr/tutoriels/php/calendrier-php-157 .
Mon problème étant que je veux ajouter une table commentaire dans la DB, mais je n'arrive pas du tout à l'afficher correctement, il prends la place de mon titre :(.
J'ai tenté de faire comme ceci :

function getEvents($year) {
        global $DB;
        $req = $DB->query('SELECT id,title,commentary,date FROM events WHERE YEAR(date) ='.$year);
        $r = array();
        while($d = $req->fetch(PDO::FETCH_OBJ)){
            $r[strtotime($d->date)]$d->id] = $d->title;
            $r[strtotime($d->date)]$d->id] = $d->commentary; //ce que j'ai essayé
        }
        return $r;
    }

Mais il prend la place de mon titre. J'aimerai faire apparaître le commentaire comme cela =>

J'ai essayé de chercher une solution dans les commentaires, il y en avait un, mais il n'a pas du tout fait pareil que le tutoriel, donc est-ce possible d'afficher un contenu en dessous du titre avec cette méthode ?

En vous remerciant d'avance.

2 réponses


Pakito
Réponse acceptée

Stocke les deux variables dans un tableau, et retournes les.

Là tu définis d'abord que $r[strtotime($d->date)]$d->id] a pour valeur $d->title et juste après qu'il a pour valeur $d->commentary.

Tu peux faire un truc comme ça :

function getEvents($year) {
    global $DB;
    $req = $DB->query('SELECT id,title,commentary,date FROM events WHERE YEAR(date) ='.$year);
    $r = array();
    while($d = $req->fetch(PDO::FETCH_OBJ)){
        $r[strtotime($d->date)]$d->id]'title'] = $d->title;
        $r[strtotime($d->date)]$d->id]'commentary'] = $d->commentary; //ce que j'ai essayé
    }
    return $r;
}

Ainsi, tu auras les deux infos !

PS : "Commentaire" se dit "Comment" en anglais, et non "commentary" il me semble.

Pedon
Auteur

Bonsoir,
D'accord, merci pour l'astuce, je vais tester cela :).
D'accord pour commentaire, ça me semblait plus marrant commentary :D.

Edit : N'arrivant pas à comprendre ce tableau, mais je ne sais pas si c'est un tableau assiociatif ou le "strtotime" est la clef et "title" et "commentary" sont ses valeurs et assiociatif avec les valeurs ses clefs, un peu comme ça.

tableau { strtotime : { title : "le titre" , commentary : "le commentaire } }

Et le code avec un print_r :

Array ( [1398124800] => Array ( [1] => Array ( [title] => er event [commentary] => Lorem daso ) )

Mais j'ai réussi à afficher ce que je veux, mais je n'aime pas le rendu final ._., mais pour ce que je veux faire en attendant, ça me suffit, mais je réfléchirai plus tard pour avoir un meilleur rendu, donc pour ceux qui sont dans mon cas et n'ayant pas réussi pas à trouver de solution.

date.php :

function getEvents($year) {
        global $DB;
        $req = $DB->query('SELECT id,title,commentary,date FROM events WHERE YEAR(date) ='.$year);
        $r = array();
    while($d = $req->fetch(PDO::FETCH_OBJ)){
        $r[strtotime($d->date)]$d->id]= $d->title.'</br> '.$d->commentary;
    }
    return $r;
}

Le css :

table td:hover .events li{ height:auto; line-height:40px; font-weight:bold; border-bottom:1px solid #D6D6D6; padding-left:41px; text-indent:0; background:none; width:500px;}

en mettant sa hauteur à auto pour que les contenu puissent rentrer dans la liste.

Edit 20/04 : Merci, je ne sais pas pourquoi je n'ai pas réfléchi comme ça --'.
Donc pour ceux cherchant, il faut modifié la page calendrier.php

<ul class="events">
    <?php if(isset($events$time])): foreach($events$time] as $e): ?>
                <!-- faites un echo $e'Nom de la clef du tableau'] --> 
        <li><?php echo $e'title']; ?></li> 
        <?php endforeach; endif; ?>
</ul>