Avec l’introduction des fonctions avant_propre()
et apres_propre()
dans ecrire/inc_texte.php3
(depuis la version 1.7.1), on peut maintenant ajouter de nouveaux raccourcis sans plus avoir besoin de modifier le source de spip [1].
Soient les raccourcis suivants :
{1{ |
Ouverture d’un intertitre de 1er niveau (synonyme de {{{ ) [2] |
}1} |
Fermeture d’un intertitre de 1er niveau (synonyme de }}}) |
{2{ |
Ouverture d’un intertitre de 2e niveau |
}2} |
Fermeture d’un intertitre de 2e niveau |
{3{ |
Ouverture d’un intertitre de 3e niveau |
}3} |
Fermeture d’un intertitre de 3e niveau |
[*texte*] |
Texte en petites majuscules (small-caps) [3] |
[^texte^] |
Texte en exposant |
--> |
Flèche à droite (→) |
<-- |
Flèche à gauche (←) |
<--> |
Flèche bilatérale (↔) |
Nous mettons en oeuvre leur utilisation en trois étapes :
1°- Configurer les variables de personnalisation [4] en insérant les lignes suivantes dans le fichier mes_fonctions.php3
, à créer si nécessaire :
# On reprend les deux variables de personnalisation déjà existantes :
$GLOBALS['debut_intertitre'] = '<h3 class="monstyle">';
$GLOBALS['fin_intertitre'] = '</h3>';
# Et on y ajoute quatre nouvelles pour les intertitre :
$GLOBALS['debut_intertitre_2'] = '<h4 class="monstyle">';
$GLOBALS['fin_intertitre_2'] = '</h4>';
$GLOBALS['debut_intertitre_3'] = '<h5 class="monstyle">';
$GLOBALS['fin_intertitre_3'] = '</h5>';
On ajoute également les variables suivantes dans le fichier ecrire/mes_options.php3
, à créer si nécessaire :
# Variables de personnalisation pour les petites majucules:
$GLOBALS['debut_smallcaps'] = '<span style="font-variant: small-caps">';
$GLOBALS['fin_smallcaps'] = '</span>';
# Variables de personnalisation pour le texte en exposant
$GLOBALS['debut_exposant'] = '<sup class="spip">';
$GLOBALS['fin_exposant'] = '</sup>';
Vous pouvez bien sûr adapter ces variables, par exemple remplacer <span style="font-variant: small-caps">
par <span style="nom">
(en définissant la classe nom
dans votre feuille de style comme devant afficher les petites majucules).
2°- Ne pas oublier de configurer la feuille de style du site pour tenir compte de ces modifications (en fonction des variables de personnalisation que vous aurez choisies).
3°- Ajouter les fonctions suivantes dans le fichier ecrire/mes_options.php3
[5] :
function avant_typo($texte) {
$chercher_raccourcis = array(
/* 3 */ "/<-->/",
/* 4 */ "/-->/",
/* 5 */ "/<--/");
$remplacer_raccourcis = array(
/* 3 */ "↔",
/* 4 */ "→",
/* 5 */ "←");
return preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte);
}
function avant_propre($texte) {
$chercher_raccourcis = array(
# /* 1 */ "/\{0\{/",
# /* 2 */ "/\}0\}/",
/* 3 */ "/\{1\{/",
/* 4 */ "/\}1\}/",
/* 5 */ "/\{2\{/",
/* 6 */ "/\}2\}/",
/* 7 */ "/\{3\{/",
/* 8 */ "/\}3\}/",
/* 9 */ "/\[\*/",
/* 10 */ "/\*\]/",
/* 11 */ "/\[\^/",
/* 12 */ "/\^\]/");
$remplacer_raccourcis = array(
# /* 1 */ "<@@SPIP_debut_intertitre_0@@>",
# /* 2 */ "<@@SPIP_fin_intertitre_0@@>",
/* 3 */ "<@@SPIP_debut_intertitre@@>",
/* 4 */ "<@@SPIP_fin_intertitre@@>",
/* 5 */ "<@@SPIP_debut_intertitre_2@@>",
/* 6 */ "<@@SPIP_fin_intertitre_2@@>",
/* 7 */ "<@@SPIP_debut_intertitre_3@@>",
/* 8 */ "<@@SPIP_fin_intertitre_3@@>",
/* 9 */ "__SPIP_debut_smallcaps__",
/* 10 */ "__SPIP_fin_smallcaps__",
/* 11 */ "__SPIP_debut_exposant__",
/* 12 */ "__SPIP_fin_exposant__");
return preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte);
}
function apres_propre($texte) {
/*
# Intertitre -1 (intertitre de niveau supérieur à l'intertitre usuel de spip)
global $debut_intertitre_0, $fin_intertitre_0;
tester_variable('debut_intertitre_0', "\n<h2 class=\"spip\">");
tester_variable('fin_intertitre_0', "</h2>");
$texte = ereg_replace('(<p class="spip">)?[[:space:]]*<@@SPIP_debut_intertitre_0@@>', $debut_intertitre_0, $texte);
$texte = ereg_replace('<@@SPIP_fin_intertitre_0@@>[[:space:]]*(</p>)?', $fin_intertitre_0, $texte);
*/
# Intertitre de deuxième niveau
global $debut_intertitre_2, $fin_intertitre_2;
tester_variable('debut_intertitre_2', "\n<h4 class=\"spip\">");
tester_variable('fin_intertitre_2', "</h4>");
$texte = ereg_replace('(<p class="spip">)?[[:space:]]*<@@SPIP_debut_intertitre_2@@>', $debut_intertitre_2, $texte);
$texte = ereg_replace('<@@SPIP_fin_intertitre_2@@>[[:space:]]*(</p>)?', $fin_intertitre_2, $texte);
# Intertitre de troisième niveau
global $debut_intertitre_3, $fin_intertitre_3;
tester_variable('debut_intertitre_3', "\n<h5 class=\"spip\">");
tester_variable('fin_intertitre_3', "</h5>");
$texte = ereg_replace('(<p class="spip">)?[[:space:]]*<@@SPIP_debut_intertitre_3@@>', $debut_intertitre_3, $texte);
$texte = ereg_replace('<@@SPIP_fin_intertitre_3@@>[[:space:]]*(</p>)?', $fin_intertitre_3, $texte);
# Traitement des petites majuscules
global $fin_smallcaps, $debut_smallcaps;
tester_variable('debut_smallcaps', '<span style="font-variant: small-caps">');
tester_variable('fin_smallcaps', '</span>');
$texte = str_replace('__SPIP_debut_smallcaps__', $debut_smallcaps, $texte);
$texte = str_replace('__SPIP_fin_smallcaps__', $fin_smallcaps, $texte);
# Traitement des exposants
global $fin_exposant, $debut_exposant;
tester_variable('debut_exposant', '<sup class="spip">');
tester_variable('fin_exposant', '</sup>');
$texte = str_replace('__SPIP_debut_exposant__', $debut_exposant, $texte);
$texte = str_replace('__SPIP_fin_exposant__', $fin_exposant, $texte);
global $activer_antispam;
if($activer_antispam && function_exists('anti_spam'))
return anti_spam($texte);
else
return $texte;
}
#
# Fonctions anti-spam
#
function crypter ($texte) {
include_ecrire ("inc_acces.php3");
$masque = creer_pass_aleatoire(3);
$texte = ereg_replace("@", "_(".$masque.")_", $texte);
$s="";
for ($i=0;$i<strlen($texte);$i++)
$s .= "&#".ord($texte{$i}).";";
return $s;
}
# Autre possibilité: simplement utiliser la fonction antispam native de spip
# function crypter ($texte) {
# return antispam($texte);
#}
# Attention PHP 4.05 ou supérieur est nécessaire pour la fonction preg-replace-callback
# Voir http://be2.php.net/manual/fr/function.preg-replace-callback.php
function anti_spam ($texte) {
return preg_replace_callback('|(mailto:)?[-\w.]{2,}@[-\w.]{2,}|',
create_function('$match', 'return crypter($match[0]);'),
$texte);
}
4°- Filtre anti-spam générique. Dernière chose à faire : activer, si vous le souhaitez, le filtre anti-spam. Avec la fonction de cryptage proposé ici (que vous pouvez changer très simplement), dans tout lien vers une adresse mail présente dans votre site, l’arobase sera transformé en chaîne aléatoire et le mail sera chiffré. Pour activer cette fonction, il vous suffit d’ajouter la ligne suivante dans votre fichier ecrire/mes_options.php3
:
$activer_antispam = true;
Et voilà, en principe, tout doit fonctionner. Tout ce que vous devez placer dans votre fichier ecrire/mes_options.php3
se trouve dans ce fichier :
Si des gens accrochent à cette contrib et qu’ils ont envie de poursuivre, ce serait bien de modifier la barre d’outils pour qu’elle intègre ces nouveaux raccourcis.
Discussions par date d’activité
18 discussions
Bonjour,
Félicitation pour cette contrib, très bien, que j’ai voulu installer pour le « cryptage » des adresses, antispam.
Une question : j’ai lu à la fin du code qu’il faut utiliser php4, est-ce vraiment nécessaire ?
De mon côté, sans trop savoir, j’ai créé un fichier php, qui appelle (inclut) un fichier php3, et ceci :
- parce que mon hébergeur Free permet php4.3.4 mais n’autorise pas « l’envoi de mails depuis php4 », « pour lutter contre le spam » (alors que cela semble être le cas pour php3)
- parce que mes squelettes actuels sont un répertoire spécifique et que j’ai eu l’impression qu’il fallait faire ainsi pour que ça marche (il y avait une raison je crois, peut-être avais je essayé autrement, mais j’ai oublié)
En tout cas cela semble marcher, puisque les adresses mél sont transformées (@ n’apparaît plus dans le corps du texte)
Mais tout avis sur ce j’écris ici m’intéresse bien, y compris mes craintes qu’avec le passage (de spip) à php4, Free ne permettrait plus l’envoi de méls ??
Salut,
C’est pour la fonction
preg_replace_callback()
. Il y a moyen de s’en passer mais il faut réécrire la fonctionanti_spam
.Je suis pas spécialiste et je ne connais pas le hosting de free mais il me semble que ça n’a rien à voir. Un fichier php ou php3 est considéré de manière indifférente par php.
Les limitations d’usage de la fonction mail() sont propres à l’hébergeur (et, à ma connaissance, concernent tous les scripts php).
Donc, pas besoin de jouer avec des fichiers php ou php3 ni avec des include.
Répondre à ce message
Dans ecrire/mes_options2.php3, il manque peut-être la déclaration des globales et des valeurs par défauts pour les petites majuscules...
Argh ! (Merci Guillaume !) c’est pour cela que ça a marché et que cela n’a plus marché ! Tu as du supprimer la ligne sans le vouloir ! :-)
Maintenant ça remarche ! :)
Oups. Merci.
A quel endroit faut il ajouter ces lignes ? au début du fichier ?
à la place ou en plus de :
# Variables de personnalisation pour les petites majucules :
$GLOBALS[’debut_smallcaps’] = ’’ ;
$GLOBALS[’fin_smallcaps’] = ’’ ;
??
Ou bien le fichier téléchargeable a-t-il déjà été corrigé ??
J’ai en fait l’impression que c’est plutôt cette deuxième hypothèse qui est la bonne, merci de confirmer
PS Excusez de mon incompétence en php, qui fait que je ne peux tout de suite voir ce qu’il en est.
Le fichier est corrigé. Il vous suffit de suivre les instructions données dans l’article.
Répondre à ce message
Le tiret demi-cadratin est intégré dans spip-lab et dans spip-cvs.
Ce sera très utile. Merci !
Répondre à ce message
Peut-être suis-je bouché, mais... serait-il possible d’avoir un exemple de code (ça peut être très court !) de l’utilisation de l’antispam ? Désolé, mais il y a quelque chose qui m’échappe...
Mercu d’avance ! :-)
Salut,
Ce qui est fourni ici, c’est un antispam qui — s’il est activé — va s’appliquer automatiquement aux adresses de courrier électronique présentes dans du texte (en fait aux éléments sur lesquels est passé le filtre
propre()
).Si tu veux l’utiliser (ce n’était pas prévu mais pourquoi pas) pour des mails appelés directement (par exemple avec la balise #EMAIL dans une boucle AUTEURSà, il faut appeler le filtre de la façon suivante :
[(#EMAIL|crypter)]
Répondre à ce message
Bonsoir
J’ai suivi la marche à suivre pour installer les
nouveaux raccourcis typographiques mais je ne
comprends pas comment modifer les intertitres h4 et h5
dans ma feuille de style CSS. (étape n°2)
J’ai modifié mes_fonctions.php en remplaçant
<h3 class="monstyle">
par<h3 class="spip">
(idem pour h4 et h5).J’ai réussi à modifer l’intertitre h3 comme c’était
écrit dans la doc officielle en modifiant h3.spip,
mais en incluant h4.spip et h5.spip dans ma feuille de
style CSS, ça ne me donne rien du tout.
J’ai du louper un truc quelque part... mais je ne sais
pas où... Merci pour votre aide et merci d’avoir créer
Spip =)
Galad_ébutante_en_Spip
Salut,
La feuille de style doit correspondre à la classe. Trois possibilités donc :
- change « monstyle » par « spip » dans les variables de personnalisation et laisse ta feuille de style comme elle est ;
- change « h4.spip » par « h4.monstyle » et « h5.spip » par « h5.monstyle » dans la feuille de style ;
- change la feuille de style et les variables de personnalisation en utilisant le nom que tu veux (
<h4 class="blabla">
et h4.blabla) ;Bon courage,
François
Répondre à ce message
Bonjour,
Très bien, c’est chouette et sympa.
Mais comme cela ne remet pas en cause les raccourcis existant, pourquoi ne pas l’intégrer à Spip directement ?
Je sais c’est encore le long débat intégration ou contrib ou mods etc... mais là, c’est tout de même un peu différent, puisque cela vient compléter et améliorer une fonction existante...
A+
Salut,
Perso, j’ai rien contre à ce que tout ou partie de cette contrib soit intégrée à spip (les semi-cadratins devraient d’ailleurs l’être sous peu, dès qu’un dev aura ajouté les deux lignes nécessaires dans inc_texte.php3) mais :
- publié en contrib, le truc est disponible plus tôt pour ceux que ça intéresse (rien n’empêche son intégration ultérieure à spip) ;
- publié en contrib, il y a un retour des utilisateurs avant intégration ou non dans spip (si 25 personnes trouvent une contrib hyper-utile et postent sur les listes pour demander son intégration, au moins, l’équipe de développement saura qu’il y une demande pour la fonctionnalité en question) ;
- publié en contrib avant, si ça doit être intégré, la qualité du code sera sans doute meilleure, car testée par beaucoup de monde dans des conditions variées ;
Voilà,
François
Pour ma part, je l’ai testé et ça marche, je l’ai installé dans un site sur lequel je travaille. Seul bémol pour l’instant, je n’ai pas réussi à faire fonctionner l’antispam générique, mais si tout le monde par ailleurs dout que ça marche, c’est que j’ai du oublier quelque chose ! :-0
Ce srait bien en effet que ce soit dans SPIP en standard.
La ligne
$activer_antispam = true;
dansmes_fonctions.php3
peut-être ?D’après l’article, elle est censée se trouver dans « mes_options.php3 » !!
(Bon, c’est dimanche après-midi... ;-)) )
Oups. Autant pour moi. C’est effectivement dans le fichier
ecrire/mes_options.php3
que doit se trouver cette ligne.Toutes mes excuses.
Répondre à ce message
Attention,quand on mêle note de bas de page et petites capitales, on a un problème si le texte en petites capitales démarre la note de bas de page : on se retrouve avec le code suivent :
[[[*texte_en_petites_capitale*], suite de la note]]
L’affichage donne cela :
Pour éviter cela - et si on ne veut ou ne peut toucher au code - il faut insérer un espace insécable entre la marque de note de bas de page et la marque de petites capitales, comme cei :
[[ [*texte_en_petites_capitales*], suite de la note]]
Peut-être est-il possible de modifier la code d’origine, mais je ne m’y risque pas pour l’instant...
Salut,
Merci de cette excellente remarque (d’autant plus pertinente que les petites majuscules risquent d’être régulièrement utilisées en notes de bas de page.
Je viens de modifier le code et ça fonctionne : en principe
[[[*texte_en_petites_capitale*], suite de la note]]
devrait renvoyer le résultat attendu.Le problème était du à la fonction native de spip dite des « notes non automatiques », qui reconnaît un note du type
[[<xxx> suite]
comme devant être numérotée « xxx ».J’ai donc utilisé un format format intermédiaire (
__SPIP_debut_smallcaps
et__SPIP_fin_smallcaps
) que je ne convertis dans le format définitif que dansapres_propre()
.Je viens de tester et ça à l’air de fonctionner correctement. N’hésitez pas à signaler tout problème : le moteur typographique de spip est tellement compliqué qu’on est jamais sûr d’être à l’abri d’une interférence quelque part.
Répondre à ce message
Qd même, j’ai quelques questions :
- est-ce que les
déjà dans mon site seront encore valables après ces modifs ?
- est-ce que les contribs de Coupure en pages et création de sommaire seront impactés ?
etc.
Merci
A+
Salut,
Je crois qu’il faudrait que tu réécrives ta question en utilisant les balises
<code>
.Peux-tu préciser à quel script tu fais référence ? A priori, les raccourcis présents ici fonctionnent exactement comme les raccourcis spip. Donc pas de problème.
Par rapport à la création d’un sommaire, je n’ai jamais vu ça sous spip (mais il est vrai que c’est peu pertinent avec un seul niveau d’intertitre), mais ce serait une fonctionnalité très complémentaire à la présente contrib. Genre, un truc à la wikipedia, où un sommaire de chaque page complexe est automatiquement généré (i.e. http://fr.wikipedia.org/wiki/Chemin...). Dans cette perspective, il est envisageable, assez facilement, d’afficher de longs articles sur plusieurs pages, en générant de façon complètement automatique des liens entre eux et un sommaire du tout.
Répondre à ce message
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 : |