Acceuil :: La page de Tinu :: Logiciels :: 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);
}
/***********************************************************/
URL: https://www.iapetus.se/article55.html