Je suis en train de commencer un petit mod pour faire comme SPIP, IE linker les mots clés d'un message vers un topic.
Actuellement j'ai fait simple avec un script qui répertorie les titres des sujets des forums désignés, sélectionne les mots, les mets en tableaux, et crée leur code remplacement:
- Code: Tout sélectionner
$word_count = 0;
$words_already = array();
$tl_pattern = array();
$tl_remplacement = array();
$tl_forums_array = "2,3";
$sql = "SELECT topic_id, topic_title FROM " . TOPICS_TABLE . " WHERE forum_id IN (" . $tl_forums_array . ")";
$result = $db->sql_query($sql);
while($row = $db->sql_fetchrow($result))
{
// Strip html tags
$message = utf8_decode($row['topic_title']);
$message = strtr($message,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
// Remove the words with 4 characters or less, and parse the others
preg_match_all("/([a-z]{5,})/i", $message, $out);
for($i = 0; $i < count($out); $i++)
{
$new_word = utf8_encode($out[0][$i]);
if(!in_array($new_word, $words_already) && $new_word != '')
{
$words_already[] = $new_word;
$tl_pattern[$word_count] = "/(" . $new_word . ")/i";
$tl_remplacement[$word_count] = '<a href="viewtopic.php?t=' . $row['topic_id'] . '" title="' . htmlentities(utf8_decode($row['topic_title'])) . '">$1</a>';
$word_count++;
}
}
}
Les accents sont un enfer....
Ensuite je transforme le message par:
- Code: Tout sélectionner
$message = preg_replace($tl_pattern, $tl_remplacement, $message);
Comme montré plus haut, je supprime les caractères spéciaux avant de les stocker, c'est quasiment obligatoire. Du coup mes mots avec des caractères spéciaux ne sont pas reconnus par la dernière partie.
Voyez vous, en une ligne, comment faire pour qu'ils soient pris en compte sans dénaturer le post?
Ce n'est pas clair, je donne un exemple:
Titre du sujet: les pâtes c'est truculent
Mots clés retrouvés: pâtes, truculent
Mots clés enregistrés: pates (sans l'accent donc), truculent
Message de sortie:
- Code: Tout sélectionner
les pâtes c'est [url=truculent]truculent[/url]
Il devrait être:
- Code: Tout sélectionner
les [url=pâtes]pâtes[/url] c'est [url=truculent]truculent[/url]
sans que pâtes ne soit transformé en pates.
Merci
EDIT: Hmmm...
- Code: Tout sélectionner
$message = utf8_decode($row['topic_title']);
//$message = strtr($message,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ','aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
// Remove the words with 4 characters or less, and parse the others
preg_match_all("/([a-zàáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ]{5,})/i", $message, $out);
a l'air de fonctionner, merci.
J'aurai d'autres questions bientôt


