Introduction à la contrib pour Spip 1.8.3
Cette méthode [2] ne touche pas au noyau de Spip. Si, à première vue, elle semble compliquée, c’est parce que l’installation touche à plusieurs fichiers :
- ecrire/mes_options.php3 (script pour transformer les liens) ;
- mes_javascripts.js (script pour décoder les liens) ;
- commat.gif (image d’une arobase) ;
- création d’une squelette « version imprimable » ;
- squelette(s) (ajouter 2 lignes : inclusion de mes_javascripts.js et lien pour appeler la version imprimable).
Ces 5 étapes sont décrites en détail plus bas.
Description
La page à l’écran
Un raccourci e-mail [->quelquun@autre.part.org]
est d’habitude converti en HTML de la façon suivante :<a href="mailto:quelquun@autre.part.org" class="spip_out">quelquun@autre.part.org</a>
— ce qui laisse le champ ouvert pour les robots spam.
Intercepté par le code que nous mettons dans mes_options.php3
ce lien va être réécrit pour devenir :
<a href="#" title="quelquun..åt..autre.part.org" onClick="location.href = dolink(this.title); return false;">[Email]</a>
Il n’y a plus d’arobase ni de « mailto» pour orienter les robots. Lorsque le visiteur clique sur le lien c’est le JavaScript onClick
qui est exécuté. Ce script reconstitue le lien.
Et si le visiteur n’a pas JavaScript ? (Il s’agit vraiment de très peu de personnes.) C’est certain : ils ne pourront pas utiliser le lien. Ils peuvent pourtant lire l’adresse en survolant le lien avec la souris. Pour aider ceux qui ont ce problème, je mets un mot explicatif sur la page « technique » du site :
Parce que le spam est devenu un problème grandissant, nous sommes très prudents dans la manière de mettre publiquement à disposition des adresses e-mail. Celles-ci ne figurent pas sur les pages de ce site, mais sont créées uniquement au moment où le visiteur clique sur un lien. Les visiteurs qui n’ont pas Javascript ou un programme e-mail ne pourront pas utiliser le lien. Cependant, quand le curseur passe sur le lien, un « infobulle » apparaît avec l’adresse e-mail (sous une forme difficile à lire pour les robots spam, mais dont la plupart des visiteurs pourront faire usage).
La version imprimable
Cela ne sert à rien d’imprimer une page d’informations avec les adresses e-mail cachées. Cette page, par exemple, ne vaudrait pas grand-chose reproduite sur du papier.
Pour la version imprimable donc (cliquer sur le lien « version imprimable ») on transforme le lien autrement. On rend l’adresse e-mail visible (dans le cas où elle a été cachée derrière le lien) en remplaçant l’arobase avec une petite image d’arobase. L’adresse s’imprime donc sur papier, mais il n’y pas de lien cliquable à l’écran de cette version imprimable. Tant qu’on y est, on fait la même chose pour les liens web. [3]
Installation
1. Le script principal
Dans un fichier mes_options.php3 (à créer, si tu n’en a pas déjà, dans le répertoire /ecrire) ajouter cette fonction [4] :
<?php
function apres_propre($texte) {
// Antispam
// Dernière mise à jour : 1/12/2005
//
// Variables qui peuvent être modifiées à volonté mais si $arobase est modifiée
// if faut aussi modifier la fonction JavaScript "dolink"
$arobase = '..åt..'; // tip visible OnMouseOver
$affichage = '[Email]'; // affichage par défaut d'un lien mail sans texte
// *** pour version imprimable
if ($_GET['printver']) {
$masque = '<img src="IMG/commat.gif" alt="" width="13" height="13" style="vertical-align: middle;" />';
preg_match_all('/<a[\\s]{1}[^>]*href=["\']?([^>\\s"\']+)["\']?[^>]*>([^<]*)<\\/a>/is', $texte, $found);
$total = count($found[0]);
for($i=0; $i < $total; $i++) {
if (preg_match("/^mailto:(.*)/",$found[1][$i],$link)) {
// *** alors il s'agit d'un lien email
$href = $link[1];
} else {
// *** c'est une adresse web
$href = $found[1][$i];
}
$linktext = $found[2][$i];
// *** si le texte du lien contient déjà l'adresse ou s'il s'agit d'une
// *** ancre locale on peut jeter l'adresse.
if ($linktext == $href || strpos($href,"#") === 0) { $href = "";}
// *** sinon l'ajouter entre crochets.
if ($href > "") { $href = "[". trim(str_replace("@", $masque,$href)) ."]";}
if (preg_match("/\s*\S+[\w_-]@[\w_-]\S+\s*/",$linktext)) {
// *** attention : détecter précisément une adresse mail pour éviter de
// *** corrompre des raccourcis comme [<imgXX>->quelquun@nullepart.net]
// *** où Spip code la première partie dans un format
// *** comme : @@SPIP_SOURCEPROPRE2@@
$linktext = trim(str_replace("@", $masque,$linktext)." ".$href);
} else {
$linktext = trim($linktext." ".$href);
}
$texte = str_replace($found[0][$i], $linktext, $texte);
}
} else {
// *** pour la page à l'écran
// *** agir seulement sur les emails
preg_match_all("/[\"\']mailto:([^@\"']*)@([^\"']*)[\"\']/",$texte,$found);
$total = count($found[0]);
for($i=0; $i < $total; $i++) {
// *** extraire les deux parties de l' adresse (avant et après l'arobase)
// *** et réécrire le lien
$part1 = $found[1][$i];
$part2 = $found[2][$i];
$newstr ='"#" title="' . $part1 . $arobase . $part2 . '" onClick="location.href = dolink(this.title); return false;"';
$texte = str_replace($found[0][$i], $newstr, $texte);
}
// *** si le texte d'un lien contient une adresse email, le remplacer par le texte choisi
preg_match_all("/>\s*\S+[\w_-]@[\w_-]\S+\s*<\/a/",$texte,$found);
$total = count($found[0]);
for($i=0; $i < $total; $i++) {
$texte = str_replace($found[0][$i],">$affichage</a",$texte);
}
}
return $texte;
}
?>
2. Le JavaScript qui recrée le lien
Mettre cette fonction dans un fichier mes_javascripts.js
[5] annexe qui sera reliée depuis vos squelettes :
function dolink(ad){
link = 'mailto:' + ad.replace(/\.\..+t\.\./,"@");
return link;
}
3. L’image de l’arobase (pour version imprimable)
Placer l’image de l’arobase (commat.gif) [6] dans le répertoire /IMG
.
4. Squelette « version imprimable »
Créer un couple de fichiers pour le squelette de version imprimable (imprim.php3
et imprim.html
). Pour ce qui concerne l’antispam ce squelette n’a besoin de rien en particulier.
5. Dans tes squelettes [7]
- Dans la partie <head>
de ton squelette, mettre la ligne [8] :
<script type="text/javascript" src="mes_javascripts.js"></script>
- Ajouter un lien qui appellera l’article avec le squelette de « version imprimable ». Par exemple :
<a href="imprim.php3?id_article=#ID_ARTICLE" target="_blank" onClick="javascript:window.open('imprim.php3?id_article=#ID_ARTICLE&printver=1', 'print_version', 'scrollbars=yes, resizable=yes, menubar=yes, width=740, height=580'); return false;"><:ver_imprimer:></a>
Note : Cette méthode va attraper presque tous les adresses e-mail : celles résultantes d’un raccourci SPIP, comme celles entrées à la main en HTML [9]. Pour une sécurité plus grande, il est possible d’ajouter le filtre
|antispam
à toutes les balises qui sont susceptibles de contenir des adresses e-mail, et ceci aussi bien dans le squelette normal que dans le squelette « imprim.html ». Par exemple,[(#TEXTE|antispam)]
. Ce filtre inclus dans SPIP transforme toutes les arobases en une série aléatoire de 3 caractères.
Fichiers à télécharger
Dans le fichier ci-joint se trouvent les fichiers avec tout le code noté ci-dessus.
Pour mieux comprendre ou améliorer le système
Regarder les lignes marquées par des commentaires avec trois étoiles *** dans le fichier mes_options.php3
et dans le squelette article.html
.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |