Truc comme SPIP

Ce forum vous servira à trouver de l'aide uniquement en ce qui concerne le développement d'un de vos MODs, ou l'adaptation d'un MOD phpBB2 pour phpBB3.

Modérateur: Equipe

Truc comme SPIP

Messagepar Dr DLP » 18 Juin 2009 à 18:56

Bonsoir,

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 :mrgreen:
Avatar de l’utilisateur
Dr DLP
Floodeur universel
Floodeur universel
 
Messages: 8411
Inscription: 05 Mar 2003 à 22:49
Localisation: Var ( 83 )

Re: Truc comme SPIP

Messagepar Dr DLP » 19 Juin 2009 à 22:44

Bonsoir,

La suite.
J'un souci avec le code plus haut, c'est qu'il prend systématiquement le masque le plus court.
Par exemple j'ai deux mots: prêtre et prêtresse.
Le mot transformé est prêtresse, comment faire pour qu'il devienne prêtresse?
Merci :)

EDIT: Ordonner les patterns est sans effet:
Code: Tout sélectionner
array_multisort($tl_patternSORT_STRINGSORT_DESC$tl_remplacement); 

ordonne les tableaux mais ne change pas le problème (idem avec SORT_ASC bien sûr).
Avatar de l’utilisateur
Dr DLP
Floodeur universel
Floodeur universel
 
Messages: 8411
Inscription: 05 Mar 2003 à 22:49
Localisation: Var ( 83 )


Retourner vers Aide au développement

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Partenaires : phpBBHacks.com • phpBB-Seo.com • EzCom-fr.com • phpBB3 Styles • phpBB podpora • phpBB Portugal    Liens : Net Avenir • PromoBenef • Ticket Gagnant