Salut,
Je suis en train de coder un petit script pour afficher des commentaires, jusque là rien de spécial, jusqu'à ce que je veuille donner la possibilité de répondre aux commentaires.
Et encore, répondre à un commentaire est facile à mettre en place, mais la ou je sèche vraiment c'est au moment de répondre à une réponse.
Il me semble qu'il faut utiliser la récursivité mais je n'ai jamais expérimenté la chose.
En tout cas j'ai mes tables comme ceci
id = l'id du commentaire
post_id = l'id de l'article en rapport
com_id = l'id du commentaire auquel la réponse se rapporte
Alors si quelqu'un peut me mettre sur la voie, je lui serait grandement reconnaissant. Merci. :)
Bon bah j'ai réussi, sans l'aide de Google, j'ai donc continué sur ma lancée comme je voyais que je touchait au but et finalement ça s'est bien passé, j'ai donc fait cette petite fonction récursive:
function displaycoms($coms){
foreach ($coms as $com): ?>
<div class="com">
<div class="pseudo"><?php echo $com->pseudo; ?></div>
<p><?php echo $com->contenu; ?></p>
<?php
if(isset($com->rep) && !is_null($com->rep)){
displaycoms($com->rep);
}
?>
</div>
<?php
endforeach;
}
displaycoms(coms::getComs($post->id));
Du coup tout est impeccable, j'ai aussi modifié, dans mon code et dans le sujet (au cas ou vous voudriez récupérer mon code), la classe coms car il y avait un petit bug.
Je pense qu'on peut encore améliorer la chose en ne faisant qu'une méthode pour les deux cas dans la classe, mais ça fonctionn très bien comme et personnellement je m'en contente amplement. :)
Bonjour à toi @Natà,
Pour ton problème je pense que le design pattern de l'arbre sera le plus approprié et le plus simple à mettre en place. Tu peux faire une recherche sur Google il y a plein d'exemple d'implémentation de de DP. Il y a un tuto là dessus qui explique le fonctionnement appliqué à CakePHP ( http://www.grafikart.fr/tutoriels/cakephp/tree-behaviour-cakephp-160).
Salut CaporalDead, je jette un coup d'oeil desuite à la vidéo, entre-temps j'ai quand même avancé un peu et je me suis fait ma petite fonction récursive, non sans mal, mais ça donne ça :
class coms{
static function getReplies($id,$id_com){
$sql = "SELECT * FROM coms WHERE post_id = $id AND reply_id=$id_com";
$coms = query($sql);
foreach ($coms as $com) {
$com->rep = self::getReplies($id,$com->id);
}return $coms;
}
static function getComs($id){
$sql = "SELECT * FROM coms WHERE post_id = $id AND reply_id IS NULL";
$coms = query($sql);
foreach ($coms as $com) {
$com->rep = self::getReplies($id,$com->id);
}return $coms;
}
}
Et je reçois un truc comme ça :
Array
(
[0] => stdClass Object
(
[id] => 2
[pseudo] => Pierre
[contenu] => Jariv pa xD
[reply_id] =>
[post_id] => 1
[rep] => Array
(
[0] => stdClass Object
(
[id] => 3
[pseudo] => Paul
[contenu] => Go lire la doc, et un Bescherelle
[reply_id] => 2
[post_id] => 1
[rep] => Array
(
[0] => stdClass Object
(
[id] => 4
[pseudo] => Pierre
[contenu] => gé lu mé je compran ri1
[reply_id] => 3
[post_id] => 1
[rep] => Array
(
[0] => stdClass Object
(
[id] => 5
[pseudo] => Jacques
[contenu] => Ça se voit...
[reply_id] => 4
[post_id] => 1
[rep] =>
)
)
)
)
)
[1] => stdClass Object
(
[id] => 8
[pseudo] => Michel
[contenu] => +1
[reply_id] => 2
[post_id] => 1
)
)
)
[1] => stdClass Object
(
[id] => 7
[pseudo] => Marie
[contenu] => vou pouvé m'aidez ?
[reply_id] =>
[post_id] => 1
[rep] => Array
(
[0] => stdClass Object
(
[id] => 5
[pseudo] => Pierre
[contenu] => Bien sur c'est quoi ton problème ?
[reply_id] => 4
[post_id] => 1
[rep] =>
)
)
Je suis sur la bonne voie ?
Parce que maintenant j'ai le même problème pour afficher ce tableau proprement :/
Merci de ton intérêt en tout cas
Et bien félicitation d'avoir trouvé par toi même une solution :). Sinon sur la bonne voie disons que c'est une solution qui fonctionne très bien, maintenant pour l'affichage tu vas avoir grosso modo le même système de boucle imbriqué, je te conseille d'afficher tes messages des ul>li histoire que ce soit facile à gérer.
Bonne continuation :).