Acceuil :: La page de Tinu :: Logiciels :: SPIP filtre ’liens_mots’

 

SPIP filtre ’liens_mots’

31 mai 2011, par Tinu
 

Ce filtre construit des liens automatiques sous les mots-clés vers la definition dans un texte. Ce filtre a été écrit pour http://www.apotheke-scheibbs.at et est aussi utilisé sur cette site.

Installation : Ajoutez le code en bas dans le fichier mes_fonctions.php et modifiez la balise #TEXTE dans votre squelette comme indiqué.

/***********************************************************/
// autolink keywords in articles (version 5):
// webmaster (at) iapetus.ch or webmaster (at) apotheke-scheibbs.at
// site: http://www.iapetus.ch or http://www.apotheke-scheibbs.at
// usage : [(#TEXTE*|liens_mots|propre)]
// or    : [(#TEXTE*|liens_mots{4}|propre)]
// or    : [(#TEXTE*|liens_mots{4,en}|propre)]
//         to only replace the 4 first occurences of each keyword, set to -1 to replace all

function liens_mots($texte, $count = -1,$lang='') {

 global $traduc_hash_lang;

 $query_liens_autos = "SELECT id_mot, titre, type FROM spip_mots ".
                           "as liens ORDER BY CHAR_LENGTH(titre) DESC";
 $result_liens_autos = spip_query($query_liens_autos);

 $regexp_echap = "/(<html>.*?<\/html>|<code>.*?<\/code>|<cadre>.*?<\/cadre>)/si";
 $elements = preg_split($regexp_echap,$texte,-1,PREG_SPLIT_DELIM_CAPTURE);

 foreach (array_keys($elements) as $key) {
   $block =& $elements[$key];

   if ($lang == '') { //
     $lang = $GLOBALS['spip_lang'];
   }

   if (!preg_match($regexp_echap, $block)) {
     $block .= '['; // append a delimiter to simplify the pattern
     mysql_data_seek($result_liens_autos, 0);
     while($row_liens = mysql_fetch_array($result_liens_autos)) {
       $lang_mot = extraire_alphanumero($row_liens["type"]);
       if (($lang=='tous') || ($lang_mot == $lang) || (strlen($lang_mot) == 0)) {
         if (!$countdown[$row_liens["titre"]]) $countdown[$row_liens["titre"]] = $count;
       
         $regexp_search  = '/\\b'.preg_quote($row_liens["titre"],'/').'\\b(?=[^\\]]*?\\[)/';
         $regexp_replace = '[' . $row_liens["titre"].'-> mot'.$row_liens["id_mot"].']';
       
         if ($count != -1) {
           $delta = preg_match_all($regexp_search,$block,$matches);
           $block = preg_replace($regexp_search, $regexp_replace, $block, $countdown[$row_liens["titre"]]);
           $countdown[$row_liens["titre"]] = max(0,  $countdown[$row_liens["titre"]]-$delta);
         }
         else
           $block=preg_replace($regexp_search,$regexp_replace,$block);
       }
     }
   $block = substr($block, 0, -1);  // remove [ - delimiter
   }
 }
 return implode($elements);      
}
/***********************************************************/
 

SPIP filter ’liens_mots’

2.3 kB

 

 

URL: https://www.iapetus.se/article55.html