Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Hello
,
Je cherche un mod "sujets similaires". (similar topics)
Il s'agit d'un mod qui permet en bas de page de mettre plusieurs liens qui pointent vers du sujets du forum qui traitent de sujets qui ressemble au sujet qui est traité sur la page.
J'avais ca sur mon phpbb. Ca permet d'améliorer la navigation et le nombre de liens internes pertinants..
Il existe surement un mod en anglais... mais l'anglich c'est pas ma cup of tee... Si quelqu'un arrivait au moins à m'en trouver un ... je pourrais voir si j'arrive à bidouiller la bete...
merci d'avance
Hors ligne
Je n'en ai jamais croisé mais elle existe peut-être sur punres.org en effet.
Pour une mod comme celle-ci il doit falloir obligatoirement tagger chaque discussion, je ne vois pas trop comment il pourrait proposer automatiquement des sujets similaires sinon
.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Pour une mod comme celle-ci il doit falloir obligatoirement tagger chaque discussion, je ne vois pas trop comment il pourrait proposer automatiquement des sujets similaires sinon
.
Oui, il faut tagger...
Mais cela peut probablement être fait de manière automatique. Le problème n'est pas simple cependant, et nécessite surtout pas mal de réglages, selon le type de sujets (on ne traitera pas de la même façon un forum dédié à l'informatique par exemple, qu'un forum généraliste), pour être efficace.
Hors ligne
Hello 
En fait, je pense pas...
Voici la première requete d'un tel mod pour phpbb il me semble qu'il comparent les mots du sujet courant avec ceux de la base de données... c'est une approche interessante...
// Mod des Sujets Similaires - Similar Topics
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";
mais je suis pas assez calé pour comprendre beaucoup plus...
Je vais recherche l'adresse de ce mod, si je la retrouve
a+
Hors ligne
j'ai du mal à retrouver l'adresse du mod
j'en ai une
http://forums.phpbb-fr.com/viewtopic_11 … ilar+topic
mais je n'y ai pas accès...
Il me semble que par ailleurs on pouvait préciser la taille de mots que l'on ne voulait pas chercher (exemple: dans mon cas tous les mots de 4 lettres et plus peuvent etre considérés comme pertinents).
Je peux mettre tout le code de ce mod sur cette page... je sais pas si j'ai le droit.
Sinon, je peux le transmettre en MP.
c'est un mod libre de droit de phpbb2 (normalement)
merci
a+
Dernière modification par colletaphoto (03-04-2009 20:35:23)
Hors ligne
Bonjour oldie-2,
Non ce n'est pas ce mod que j'ai. car je suis sous phpbb2 et non phpbb3
De plus apparemment il nécessite de créer une table de plus... si je peux éviter c'est mieux...
Voici le code de ce mod qui se trouve sur la page viewtopic de mon phpbb2
// Mod des Sujets Similaires - Similar Topics
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not get main information for similar topics", '', __LINE__, __FILE__, $sql);
}
$topics = array();
while ( $row = $db->sql_fetchrow($result) )
{
$topics[] = $row;
}
$count_similar = count($topics);
if ( $count_similar > 0 )
{
$template->assign_block_vars('similar', array(
'L_SIMILAR' => $lang['Similar'],
'L_TOPIC' => $lang['Topic'],
'L_AUTHOR' => $lang['Author'],
'L_FORUM' => $lang['Forum'],
'L_REPLIES' => $lang['Replies'],
'L_LAST_POST' => $lang['Posted'])
);for($i = 0; $i < $count_similar; $i++)
{
$sql = "SELECT t.topic_type, t.topic_status, t.topic_id, t.topic_title, t.topic_time, t.topic_replies, t.topic_last_post_id, u.user_id, u.username, f.forum_id, f.forum_name, p.post_time, p.post_username
FROM ". TOPICS_TABLE ." t, ". USERS_TABLE ." u, ". FORUMS_TABLE ." f, ". POSTS_TABLE ." p
WHERE t.topic_id = '". $topics[$i]['topic_id'] ."'
AND f.forum_id = t.forum_id
AND p.topic_id = t.topic_id
AND u.user_id = p.poster_id
GROUP BY t.topic_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not get similar topics", '', __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$similar = $row;
$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_t']) : array();
$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f']) : array();
$topic_type = ( $similar['topic_type'] == POST_ANNOUNCE ) ? $lang['Topic_Announcement'] .' ': '';
$topic_type .= ( $similar['topic_type'] == POST_STICKY ) ? $lang['Topic_Sticky'] .' ': '';
$topic_type .= ( $similar['topic_vote'] ) ? $lang['Topic_Poll'] .' ': '';
$replies = $similar['topic_replies'];
if( $similar['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
else if( $similar['topic_type'] == POST_ANNOUNCE )
{
$folder = $images['folder_announce'];
$folder_new = $images['folder_announce_new'];
}
else if( $similar['topic_type'] == POST_GLOBAL_ANNOUNCE )
{
$folder = $images['folder_global_announce'];
$folder_new = $images['folder_global_announce_new'];
}
else if( $similar['topic_type'] == POST_STICKY )
{
$folder = $images['folder_sticky'];
$folder_new = $images['folder_sticky_new'];
}
else
{
if( $replies >= $board_config['hot_threshold'] )
{
$folder = $images['folder_hot'];
$folder_new = $images['folder_hot_new'];
}
else
{
$folder = $images['folder'];
$folder_new = $images['folder_new'];
}
}
if( $userdata['session_logged_in'] )
{
if( $similar['post_time'] > $userdata['user_lastvisit'] )
{
if( !empty($tracking_topics) || !empty($tracking_forums) || isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
{
$unread_topics = true;
if( !empty($tracking_topics[$topic_id]) )
{
if( $tracking_topics[$topic_id] >= $similar['post_time'] )
{
$unread_topics = false;
}
}
if( !empty($tracking_forums[$forum_id]) )
{
if( $tracking_forums[$forum_id] >= $similar['post_time'] )
{
$unread_topics = false;
}
}
if( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all']) )
{
if( $HTTP_COOKIE_VARS[$board_config['cookie_name'] .'_f_all'] >= $similar['post_time'] )
{
$unread_topics = false;
}
}if( $unread_topics )
{
$folder_image = $folder_new;
$folder_alt = $lang['New_posts'];
$newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
}
else
{
$folder_image = $folder;
$folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
$newest_img = '';
}
}
else
{
$folder_image = $folder_new;
$folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['New_posts'];
$newest_img = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL ."=$topic_id&view=newest") .'"><img src="'. $images['icon_newest_reply'] .'" alt="'. $lang['View_newest_post'] .'" title="'. $lang['View_newest_post'] .'" border="0" /></a> ';
}
}
else
{
$folder_image = $folder;
$folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
$newest_img = '';
}
}
else
{
$folder_image = $folder;
$folder_alt = ( $similar['topic_status'] == TOPIC_LOCKED ) ? $lang['Topic_locked'] : $lang['No_new_posts'];
$newest_img = '';
}$title = (strlen($similar['topic_title']) > 40) ? (substr($similar['topic_title'], 0, 37) . '...') : $similar['topic_title'];
$topic_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_TOPIC_URL .'='. $similar['topic_id']) .'">'. $title . '</a>';$author_url = append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']);
$author = ( $similar['user_id'] != ANONYMOUS ) ? '<a href="'. append_sid("profile.$phpEx?mode=viewprofile&". POST_USERS_URL .'='. $similar['user_id']) .'">'. $similar['username'] .'</a>' : ( ($similar['post_username'] != '' ) ? $similar['post_username'] : $lang['Guest'] );
$forum_url = append_sid("viewforum.$phpEx?f=". $similar['forum_id']);
$forum = '<a href="'. $forum_url .'">'. $similar['forum_name'] .'</a>';
$post_url = '<a href="'. append_sid("viewtopic.$phpEx?". POST_POST_URL .'='. $similar['topic_last_post_id']) .'#'. $similar['topic_last_post_id'] .'"><img src="'. $images['icon_latest_reply'] .'" alt="'. $lang['View_latest_post'] .'" title="'. $lang['View_latest_post'] .'" border="0" /></a>';
$post_time = create_date($board_config['default_dateformat'], $similar['topic_time'], $board_config['board_timezone']);$template->assign_block_vars('similar.topics', array(
'FOLDER' => $folder_image,
'ALT' => $folder_alt,
'TYPE' => $topic_type,
'TOPICS' => $topic_url,
'AUTHOR' => $author,
'FORUM' => $forum,
'REPLIES' => $replies,
'NEWEST' => $newest_img,
'POST_TIME' => $post_time,
'POST_URL' => $post_url)
);
} // while
} // for $i
} // if ( $count_similar > 0 )
// fin du mod Sujets Similaires
j'avoue que je me sens pas capable de l'adapter seul pour mon punbb...
c'est quand meme assez chaud.
Par contre, il marche de manière satisfaisante....
Dans les templates, j'ai meme suprimé les liens vers le nom du forum, pour ne garder que le lien vers les sujets similaires
merci de votre aide...
a+
Dernière modification par colletaphoto (03-04-2009 23:35:57)
Hors ligne
Dans cette mod, il n'y a en fait qu'une seule ligne à reprendre :
$sql = "SELECT topic_id
FROM ". TOPICS_TABLE ." t, ". FORUMS_TABLE ." f
WHERE topic_id != $topic_id
AND f.forum_id = t.forum_id
AND f.auth_view = 0
AND MATCH (topic_title) AGAINST ('". addslashes($topic_title) ."')
ORDER BY topic_time DESC LIMIT 0,15";Pour détailler un peut : il compare le titre du topic en cours avec les titres des autres topics présent dans le même forum (pourrait marcher pour l'ensemble du forum, suffit de configurer la requête pour ça).
Il suffit d'ajouter un lien dans la page viewtopic.php (Sujets similaires) qui dirige vers une nouvelle partie du fichier search.php dans laquelle on recherche les sujets similaires avec la requête ci-dessus un peu modifiée.
Regarde comment sont récupérés les messages récents (show_24h) dans le fichier search.php pour te rendre compte que ce type de "partie" se réalise assez facilement.
Après il faut voir si la comparaison des titres par MATCH suffit, et si l'on préfère classer les résultats par dernier message ou par "score".
Le seul soucis : il faut que ton SGBD supporte l'indexation et la recherche sur l'ensemble d'un champ TEXT (utilisation de la fonction MATCH)
Dernière modification par fanf73 (04-04-2009 10:03:00)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
... c'est une approche interessante...
Euh, c'est surtout une approche minimaliste et peu efficace (et qui risque également d'être pénalisante en terme de performances si tu as beaucoup de topics). En plus, on ne s'intéresse ici visiblement qu'aux titres, ce qui n'est pas suffisant à mon avis...
(mais bon, c'est peut-être aussi mieux que rien.. à voir...)
D'autre part, l'utilisation d'une recherche fulltext (MATCH AGAINST) requiert d'avoir un index fulltext suppémentaire dans la table topics.
Bref, je préférais l'idée initiale (les tags dans une nouvelle table, remplie à chaque post, ou bien en batch dans la crontab).
Hors ligne
bonjour,
interessant, qu'en est il de vos idées ?
colletaphoto as tu des news ?
Hors ligne
[Note prélimilaire :] je n'ai pas l'intention (ni le temps, surtout) de réaliser cette mod..
</Note>
Mes idées sont les mêmes qu'au début :
- tagguer automatiquement (et quotidennement au pire) les topics.
Tagguer les posts (c'est à dire au moment de l'enregistrement) me semble supperflu et inutile : en effet, une réponse du genre "ouais, ok" n'apporte rien sémantiquement, donc n'a pas à être traitée.
Le seul avantage (à mon avis négligeable) est l'instantanéité de la réponse.
Tagguer les topics DANS LEUR ENSEMBLE (réponses comprises) me semble plus approprié à la question.
On utilisera alors un stemmer orienté sur le langage désiré (il est évident que le français et l'anglais par exemple donnent des résultats différents), qui sera lancé par crontab toutes les x heures, et qui enregistrera dans une table spécifique les 5 mots les plus cités dans chaque topic.
(consulter "Bayes" ou "Paice" sur Google).
A la lecture, il suffira d'aller consulter cette table pour afficher les "similaires".
Evidemment, un long réglage sera nécessaire (dépendant de la fréquentation et du thème du forum) : certains mots devront être retirés (trop communs) par exemple...
Bref, super sujet d'étude pour étudiants... (je vais le suggérer)
(d'ailleurs, la plupart des ressources sur le sujet sont issues de thèses).
Hors ligne
Bonjour ,
J'avoue que je serais preneur d'un tel mod.
A-t-on des nouvelles?
Quel code peut-on essayer?
Merci
frami
Hors ligne
@frami: Tout le monde serait "preneur"... 
Mais ce dont on a besoin, ce sont de "faiseurs" (puis "donneurs") 
Comme je l'ai déjà précisé, le sujet (pour être BIEN réalisé) demande, si ce n'est une expertise, au moins une bonne connaissance de PHP + FluxBB, ainsi qu'une aptitude à synthétiser certains textes et ressources.
Et franchement, je me suis paluché un bon nombre des thèses que je signalais dans mon précédent message, il faut être motivé...
Mais on y arrive... 
J'ai déjà des bouts de code fonctionnels qui pourraient être utilisés dans une telle mod (puisque j'ai développé moi-même à partir des ressources sus-citées mon propre système de tags pour mon site), mais de là à les transformer en une "mod propre" pour FluxBB, il y a un pas (c'est à dire du temps, que je n'ai pas...).
Note : en plus, il y a dans le pbm "sujets similaires" un aspect supplémentaire de "relevance" (euh.. c'est quoi le terme français ?) qui est totalement absent de mon développement actuel (le but n'étant pas le même), et qui demanderait encore plus de dev/recherche/temps...
Hors ligne
Juste un up pourri pour signaler que je viens de m'abonner à la discussion 
en résumé:
- le sujet m'intéresse
- je manque de temps pour me pencher dessus en ce moment
- je le note dans mes priorités à creuser
- je ne serais pas capable de dév un projet comme celui la seul
Mais je dois pouvoir servir de petite main si vous avez des sous-tâches à déléguer et que je puisse vous apporter un résultat sous forme de php après avoir bossé dessus 
Je suis loin d'avoir compris le PHP mais je me soigne alors ne me parler pas de mysql svp. Mais si vous donnez des cours je suis preneur 
Hors ligne
Mon ami Koos l'a codée.
http://punres.org/viewtopic.php?id=5338
Si cela intéresse du monde, je la traduirais bien évidemment 
Edit : c'est fait, je la met a dispo dans moins de 2/3 heures 
Edit² : http://www.punbb.fr/forums/viewtopic.ph … 095#p83095
Dernière modification par adaur (12-11-2009 16:48:14)
Hors ligne
Merci Adaur, toujours la pour rendre service, tu es un bon 
Hors ligne
Pages : 1