Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je viens vers vous pour avoir un petit renseignement.J'aurais aimer savoir de quel façon sont marqués les messages comme étant lues. Si cela passe par session, ou par cookies ou encore via la base de donnée.
Car je dois faire un mod qui permet de voir le nombre de messages Non lues, mais je n'ai pas vu de table qui logs les messages vu par un utilisateur X.
(J'arrive actuellement à récupérer sans problème le nombre de "Nouveaux messages" depuis la dernière visite du membre mais ce n'est pas ce que je souhaite)
Si vous avez une idée sur le problème ou la marche à suivre je vous en serait reconnaissant.
Cordialement
Hors ligne
bonjour,
ça se passe par les cookies, et d'une visite à l'autre les topics non-lu sont perdu ( il y a dans le panneau de configuration le temps minimum sans visiter le forum pour qu'une visite soit considéré comme nouvelle visite )
il y a cette fonction là dans include/functions.php :
//
// Extract array of tracked topics from cookie
//
function get_tracked_topics()
{
global $cookie_name;
$cookie_data = isset($_COOKIE[$cookie_name.'_track']) ? $_COOKIE[$cookie_name.'_track'] : false;
if (!$cookie_data)
return array('topics' => array(), 'forums' => array());
if (strlen($cookie_data) > FORUM_MAX_COOKIE_SIZE)
return array('topics' => array(), 'forums' => array());
// Unserialize data from cookie
$tracked_topics = array('topics' => array(), 'forums' => array());
$temp = explode(';', $cookie_data);
foreach ($temp as $t)
{
$type = substr($t, 0, 1) == 'f' ? 'forums' : 'topics';
$id = intval(substr($t, 1));
$timestamp = intval(substr($t, strpos($t, '=') + 1));
if ($id > 0 && $timestamp > 0)
$tracked_topics[$type][$id] = $timestamp;
}
return $tracked_topics;
}qui j'imagine prend du cookie les dates de visite de sujet et les "Marquer ce forum comme lu" des forums, et ensuite il y a des codes comme ceci :
if (!$pun_user['is_guest'] && $cur_search['last_post'] > $pun_user['last_visit'] && (!isset($tracked_topics['topics'][$cur_search['tid']]) || $tracked_topics['topics'][$cur_search['tid']] < $cur_search['last_post']) && (!isset($tracked_topics['forums'][$cur_search['forum_id']]) || $tracked_topics['forums'][$cur_search['forum_id']] < $cur_search['last_post']))
{
$item_status = 'inew';
$icon_type = 'icon icon-new';
$icon_text = $lang_topic['New icon'];
}
else
{
$item_status = '';
$icon_text = '<!-- -->';
}à l'affichage d'une liste de sujet, pour savoir si le sujet est en "nouveau" ou pas ( l'extrait là est tiré de search.php ).
donc en détail :
!$pun_user['is_guest']=> l'utilisateur n'est pas un invité
$cur_search['last_post'] > $pun_user['last_visit']=> la dernière visite doit être plus vieille que le dernier message du sujet
(!isset($tracked_topics['topics'][$cur_search['tid']]) || $tracked_topics['topics'][$cur_search['tid']] < $cur_search['last_post'])le sujet n'est pas comme sujet visité dans le cookie, ou bien il est comme sujet visité mais la date de visite est plus vieille que la date du dernier message du sujet
!isset($tracked_topics['forums'][$cur_search['forum_id']]) || $tracked_topics['forums'][$cur_search['forum_id']] < $cur_search['last_post'])le forum du sujet n'a pas été marqué comme lu, ou bien la date où on l'a marqué comme lu est plus vieille que la date du dernier message du sujet
donc si vous vous vouliez le nombre de sujet avec des nouveaux messages ( de la même façon que fluxbb considère un sujet avec nouveau message ), il vous faudrait probablement une requête :
$result= $db->query('SELECT id, forum_id, last_post FROM '.$db->prefix.'topics WHERE last_post>'.$pun_user['last_visit']);Qui va vous donner les id, id de forum et date de dernier message du sujet de tout les sujets où il y a une réponse depuis la dernière visite, ensuite il faudra faire quelque chose du style :
$tracked_topics = get_tracked_topics();et finalement :
$num_not_read= 0;
while ($row = $db->fetch_assoc($result))
{
// si pas dans topic visité depuis le premier message et forum marqué comme lu on incrémente le nombre de sujet non lu
if( (!isset($tracked_topics['topics'][$row['id']]) || $tracked_topics['topics'][$row['id']] < $row['last_post']) && (!isset($tracked_topics['forums'][$row['forum_id']]) || $tracked_topics['forums'][$row['forum_id']] < $row['last_post']))
$num_not_read++;
}( pour avoir le $pun_user et get_tracked_topics(), il faut que include/common.php soit bien inclus ( ce qui est le cas sur toutes les pages par défaut du forum mais vous voulez peut-être l'utiliser ailleurs ) )
Dernière modification par enum (16-05-2012 20:39:03)
Hors ligne
Bonjour et tout d'abord merci pour votre réponse 
ça se passe par les cookies, et d'une visite à l'autre les topics non-lu sont perdu ( il y a dans le panneau de configuration le temps minimum sans visiter le forum pour qu'une visite soit considéré comme nouvelle visite )
Donc c'est bien cela qui me fessait peur. Un peu bancal comme système car il suffit de ne pas lire un message, et il disparait de la liste des non lus lors de la visite suivante.
donc si vous vous vouliez le nombre de sujet avec des nouveaux messages ( de la même façon que fluxbb considère un sujet avec nouveau message ), il vous faudrait probablement une requête :
$result= $db->query('SELECT id, forum_id, last_post FROM '.$db->prefix.'topics WHERE last_post>'.$pun_user['last_visit']);
Ça justement c'est ce que j'ai déjà mais ce n'est pas ce que je souhaite.
Il me reste donc 2 solutions :
soit récupérer le nombre de sujets non lus via les cookies ( mais ne connaissant pas suffisamment le système ...)
soit créer une table intermédiaire qui liste les threadid, datevisite, userid, lors d'une visite, qui serait insert/update lors d'un viewthread et avec lequel je pourrais comparer datevisite avec le lastpost d'un thread.
Je ne sais pas laquelle des solutions est la plus viable a mon sens.
Si vous avez d'autres idées je suis preneur.
Merci d'avance
Dernière modification par Fredxd45 (17-05-2012 00:06:54)
Hors ligne
Bonjour et tout d'abord merci pour votre réponse
enum a écrit :ça se passe par les cookies, et d'une visite à l'autre les topics non-lu sont perdu ( il y a dans le panneau de configuration le temps minimum sans visiter le forum pour qu'une visite soit considéré comme nouvelle visite )
Donc c'est bien cela qui me fessait peur. Un peu bancal comme système car il suffit de ne pas lire un message, et il disparait de la liste des non lus lors de la visite suivante.
Les 2 façons de faire ont leurs pour et leurs contre.
Par exemple sur des forums où il faut lire ou marquer le forum en "lu" pour qu'un message soit lu ( et pas par visite ) j'ai toujours des sections avec des nouveaux messages pendant des semaines ( mais les sujets ne m'intéressent pas donc je ne les ouvre pas ).
Enfin après des semaines mon embêtement dépasse ma flemme et je perds de précieuses secondes de ma vie à aller marquer les sections avec des nouveaux messages dont je me fiche comme lu.
( et pour moi des clics de trop, c'est le mal )
enum a écrit :donc si vous vous vouliez le nombre de sujet avec des nouveaux messages ( de la même façon que fluxbb considère un sujet avec nouveau message ), il vous faudrait probablement une requête :
$result= $db->query('SELECT id, forum_id, last_post FROM '.$db->prefix.'topics WHERE last_post>'.$pun_user['last_visit']);Ça justement c'est ce que j'ai déjà mais ce n'est pas ce que je souhaite.
Il me reste donc 2 solutions :
soit récupérer le nombre de sujets non lus via les cookies ( mais ne connaissant pas suffisamment le système ...)
soit créer une table intermédiaire qui liste les threadid, datevisite, userid, lors d'une visite, qui serait insert/update lors d'un viewthread et avec lequel je pourrais comparer datevisite avec le lastpost d'un thread.
Je ne sais pas laquelle des solutions est la plus viable a mon sens.
Si vous avez d'autres idées je suis preneur.Merci d'avance
soit récupérer le nombre de sujets non lus via les cookies ( mais ne connaissant pas suffisamment le système ...)
C'est ce que j'ai donné, dans le cookie il y a juste les dates de lecture de sujet et de "marquage" de section lue ( donc il faut faire la requête pour chopper les sujets avec des nouveaux messages, puis par rapport aux cookie ne compter que ceux qu'il faut comme je l'ai fait ).
soit créer une table intermédiaire qui liste les threadid, datevisite, userid, lors d'une visite, qui serait insert/update lors d'un viewthread et avec lequel je pourrais comparer datevisite avec le lastpost d'un thread.
ça serait pas consistent avec ce que fluxbb ( de base ) considère comme "sujet avec nouveau message", mais ça ne devrait pas être compliqué ( par contre il y a les défaut du "devoir visiter tout les sujets ( dont on se fiche peut-être ) avec des nouveaux messages" et "avoir 125 000 sujets avec nouveaux messages à l'inscription" ).
Dernière modification par enum (17-05-2012 01:54:00)
Hors ligne
Désolé je viens de rentrer et donc n'avais pas vu ta réponse, et d'ailleurs merci pour celle ci 
Je crois que vu les arguments que tu expose, je vais opté pour la solution la plus simple à savoir utiliser les cookies.
Je reviendrai posté mon petit bout de code une fois fait si jamais ça peut aider quelqu'un
Encore merci pour ton aide précieuse Enum 
Hors ligne
Pages : 1