Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
Bonjour,
C'est pas ce tuto que je devais faire mais pour moi c'est une des chose pas très simple a comprendre... et c'est un truc qu'on vois jamais dans les vidéos youtube
Pour comprendre la logique allez voir cette vidéo de Grafikart pendant que je mange ... ... ... bon ici on va mettre ma correction, mais finalement il n'y qu'une requête qui change vraiment.
Normalement si vous avez bien créer votre table topic vous avec pris soin de créer une date de création je l'ai mise en datetime
Ensuite au lieu de faire un truc 1 ou 0 c'est pas très pratique puisse que une fois que 1 et égal a 1 on peut plus update a moins d'incrémenté +1 a chaque réponse
Ce que j'ai fais c'est une table séparé
SELECT `id`, `user_id`, `topic_id`, `read_topic` FROM `f_topic_track`
Une fois que l'on poste un topic l'auteur va inséré dans cette table, évidement seul ceux qui sont connecter pourront update cette table comme ceci :
(il faudra faire deux requête d'affichage des topics une si on est connecter et l'autre si on l'est pas)
/**********
* view not view
***********/
if(isset($_SESSION['auth']) && !empty($_SESSION['auth'])){
$userid = intval($_SESSION['auth']->id);
$get = intval($match['params']['id']);
$views = $db->prepare("SELECT id FROM f_topic_track WHERE user_id = ? AND topic_id = ?");
$views->execute([$userid,$get]);
$view = $views->fetch();
//on update topic track en fonction de l'utilisateur
if($view != null){
$u = [$userid,$get];
$db->prepare("UPDATE f_topic_track SET read_topic = NOW() WHERE user_id = ? AND topic_id = ?")->execute($u);
}else{
$i = [$userid,$get];
$db->prepare("INSERT INTO f_topic_track SET read_topic = NOW(), user_id = ?, topic_id = ?")->execute($i);
}
}
Et une fois a l'affichage vous allez faire une jointure et check les différente dates c'est a partir d'ici qu'il faut une requête pour les connecter et les non connecter ici c'est pour la partie connecter avec l'id de l'utilisateur en session c'est important, cette partie vous la laissez vide pour les non connecter.
CASE
WHEN read_topic < f_topic_date THEN f_topic_date
WHEN read_topic > f_topic_date THEN read_topic
END AS read_last
LEFT JOIN f_topic_track ON f_topic_track.topic_id = f_topics.id AND f_topic_track.user_id = ?
Et a la toutes fin suffit de faire une condition
isset($posts->read_last) && !empty($posts->read_last > $posts->f_topic_date) ? 'vu' : 'non vu' ;
Ensuite a chaque réponse vous allez mettre a jour la date du topic où vous avez répondu
Et voilà vous avez votre système et le plus beau est que vous pouvez faire un bouton tout marquer comme lu et ainsi supprimer cette table topic_track mais seulement de l'utilisateur courant et ça c'est si il a la flemme de tout lire car si il lis tout suffura de faire un count de tout et le supprimer.
Et en bonus :
Si vous voulez ordonner en fonction des dernière réponses a un topic afin qu'il remonté en top vous pouvez faire comme ceci
CASE
WHEN f_topic_date < f_topic_message_date THEN f_topic_message_date
WHEN f_topic_date > f_topic_message_date THEN f_topic_date
ELSE f_topic_date
END AS Lastdate
Et vous fait order by Lastdate
Bonne journée !!