Bonjour,
Comme j'avais besoin d'un lexique pour mon site, j'ai développé une paire de filtres et j'ai ajouté une table dans la base. Tout celà est bien sûr en dehors de SPIP et je n'ai pas développé de code pour entrer des termes dans le lexique, je le fais avec PHPMyAdmin. Quoiqu'il en soit, je vous livre l'idée, la programmation n'est pas très compliquée.
Dans le texte de l'article on encadre les mots supposés figurer dans le lexique par [" et "].
Le filtre lexi à utiliser pour l'article (#TEXTE) retire les [" "]
Le filtre lexi_liste à utiliser sur #TEXTE pour extraire les mots et leur définition généère la liste des termes cités dans le texte.
La table SQL a 4 champs : (id, mot, anglais, definition)
Voilà. Exemple du résultat ici (site encore en développement) : http://navi.modelisme.com/article.php3?id_article=65
Le code PHP des filtres :
// lexi examine le texte pour y trouver des mots référencés
// un mot référence est une chaine de caractère comprise entre [" et "]
// lexi ne fait pas grand chose si ce n'est éliminer les [""]
function lexi($texte) {
while (eregi("\[\"([^\"]*)\"\]",$texte,$regs)) {
$texte = str_replace($regs[0],$regs[1],$texte);
}
return $texte;
}
// lexi_liste construit la liste de terme à partir du texte
function lexi_liste($texte) {
$resultat = '<h3 class="lexi">Lexique</h3>';
$lexique = array();
while (eregi("\[\"([^\"]*)\"\]",$texte,$regs)) {
$query = "SELECT * FROM nrc_lexique WHERE mot = \"$regs[1]\"";
$result = spip_query($query);
if ($row = spip_fetch_array($result)) {
$lexique[$row['mot']] = $row;
}
$texte = str_replace($regs[0],$regs[1],$texte);
}
ksort($lexique);
$resultat .= '<p class="lexi">';
foreach($lexique as $mot) {
$resultat .= '<b class="lexi">'.$mot['mot'].'</b> (<i class="lexi">'.$mot['anglais'].'</i>). '.$mot['definition'].'<br>';
}
$resultat .= '</p>';
return $resultat;
}