Warning: Undefined variable $NOM_SITE_SPIP in /home/iapetuss/public_html/ecrire/public/evaluer_page.php(50) : eval()'d code on line 40

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 kiB

 

 

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