Balises personnalisées

La traduction des balises PmWiki est définie par un ensemble de règles; chaque règle fait une recherche sur une syntaxe spécifique dans le texte avec balises et remplace celui-ci par un autre texte. De manière interne, ceci est fait en utilisant la fonction PHP "preg_replace".

Les règles sont ajoutées au moteur de traduction via la fonction de PmWiki Markup(), qui est définie comme

   Markup($name,$when,$pattern,$replace)

ou $name est un nom unique (une chaîne) donnée à la règle, $when dit à quel moment la règle doit être appliquée relativement aux autres règles, $pattern est la syntaxe à rechercher dans le texte à balises, et $replace est ce qui doit remplacer la syntaxe trouvée.

Par exemple, le code qui crée la règle pour ''l'emphase d'un texte'' (dans scripts/stdmarkup.php):

   Markup("em","inline","/''(.*?)''/","<em>$1</em>");

Cette définition crée une règle appelée "em" qui sera exécutée avec les autres balises "inline", et la règle remplace tout texte entre deux paires de guillemets simples avec le même texte ($1) encadré par <em> et </em>.

Les deux premiers paramètres de la fonction Markup() sont utilisés pour spécifier l'ordre dans laquelle les règles doivent s'appliquer. Le premier paramètre fournit un nom pour la règle -- "em" dans l'exemple ci-dessus. Nous aurions pu choisirs d'autres noms comme "''", ou même "deuxguillemetssimples". En général PmWiki utilise la balise elle-même pour nommer la règle (c.a.d., PmWiki utilise "''" au lieu de "em"), mais pour faciliter la lecture de cet exemple, on utilise un nom mémorisable.

Le second paramètre dit que la règle doit être utilisée en même temps que les autres règles de balises "inline". PmWiki découpe la méthode de traduction en un certain nombre de phases:

   _begin          début de la traduction
   fulltext        la traduction est faite sur tout le texte 
   split           découpage du texte à balises en lignes
   directives      exécution des directives
   inline          balises 'inline'
   links           conversion des [[liens]], liens-url, et MotsWiki  
   block           balises de blocs
   style           manipulation du style 
   _end            fin de la traduction

Donc, spécifier "inline" pour le second paramètre dit que cette règle doit être appliquée dans la même phase que les autres règles "inline". Si nous voulons une règle qui soit exécutée avec les directives -- c.a.d., avant que les règles 'inline' soient exécutées, nous aurions spécifié "directives" pour le second paramètre.

Ici une règle pour le texte @@monospaced@@

   Markup("@@","inline","/@@(.*?)@@/","<code>$1</code>");

et pour une directive (:comment ...:) qui est simplement enlevée de la sortie:

   Markup("comment","directives","/\\[:comment .*?:\\]/",'');

Ok, maintenant à propos de la règle pour '''strong emphasis'''? Nous devons être prudents ici, parce que même si cette règle est appliquée dans la même séquence que les autres balises 'inline', nous devons aussi être surs que la règle pour ''' est exécutée avant la règle pour '', parce que ''' contient aussi ''. Le second paramètre de Markup() peut être utilisé pour spécifier les relations de cette nouvelle règle par rapport aux autres:

   Markup("strong","<em","/'''(.*?)'''/","<strong>$1</strong>");           

Ceci crée un règle appelée "strong", et le second paramètre "<em" dit que cette règle doit être exécutée avant la règle "em" définie plus haut. Si nous voulons exécuter une chose après la règle "em", nous utilisons ">em" à la place. Donc, il est possible d'ajouter des règles à tout moment dans la séquence de traduction de balises de PmWiki, ceci d'une manière extensive. (En fait, les séquences "inline", "block", "directives", etc., sont justes des règles de positionnement utilisées pour donner une séquence générale pour les autres règles. Donc on peut utiliser "<inline" pour spécifier les règles qui doivent être exécutées avant les autres règles "inline".).

Si vous voulez désactiver les balises disponibles, créez une ligne du genre :

   Markup("strong","<em");           

L'absence de paramètres de syntaxe indique que vous voulez désactiver la balise.

Les règles de balises par défaut de PmWiki sont définies dans le fichier scripts/stdmarkup.php. Pour voir la table de traduction complète pendant que le programme tourne, le module scripts/diag.php fournit "?action=ruleset", qui affiche l'ensemble des règles de balises dans l'ordre d'exécution. Vous pouvez voir ceci dans BalisesPersonnalisées?action=ruleset.


Voici deux exemples que beaucoup de sites doivent se poser et qu'il n'est pas facile de résoudre. Dans ces deux cas, j'ai commencé par autoriser les balises HTML nécessaires, mais cela créait un trou dans la sécurité. Je suis donc venu aux balises personnalisées.

Balise Xiti

Xiti est un système de statistiques mis à disposition des internautes gratuitement (pour les sites sans but très lucratif, ou en cours de démarrage), qui repose sur l'affichage d'un logo. L'appel de ce logo contient, entre autres, le nom de la page que l'on souhaite tracer.

Si le navigateur n'accepte pas les Javascripts, il s'agit d'un simple appel <IMG>. Si les scripts sont acceptés, d'autres informations sont récupérées (taille de l'écran, page d'origine…).

Dans les pages à tracer, ajouter l'instruction (:xiti `{$FullName}:). Noter que $FullName est le nom complet de la page (on peut mettre autre chose, si l'on veut). Important : Ne pas oublier l'anti-quote avant l'accolade (sinon, c'est interprété comme un lien et des balises HTML sont rajoutées) ! Astuce : Mettre cette instruction dans la barre de navigation évite de mettre la balise dans toutes les pagesÂ…

Dans le fichier config.php, inclure le code suivant (remplacer XXXXXX par le code client fourni par Xiti) : Note  Certaines lignes ont été coupéesÂ… Merci de recoller les morceaux !

Markup('xiti', '>block', '/\\(:xiti (.*?):\\)/', '
<a href="http://www.xiti.com/xiti.asp?s=XXXXXX" title="Mesurez votre audience">
<script type="text/javascript">
<!--
Xt_param = \'s=210790&p=$1\';
Xt_r = document.referrer;
Xt_h = new Date();
Xt_i = \'<img width="39" height="25" border="0" \';
Xt_i += \'src="http://logv28.xiti.com/hit.xiti?\'+Xt_param;
Xt_i += \'&hl=\'+Xt_h.getHours()+\'x\'+Xt_h.getMinutes()+\'x\'+Xt_h.getSeconds();
if(parseFloat(navigator.appVersion)>=4)
{Xt_s=screen;Xt_i+=\'&r=\'+Xt_s.width+\'x\'+Xt_s.height+\'x\'+Xt_s.pixelDepth+\'x\'+X
t_s.colorDepth;}
document.write(Xt_i+\'&ref=\'+Xt_r.replace(/[<>"]/g, \'\').replace(/&/g, \'$\')+\'" t
itle="Analyse d\\\'audience">\');
//-->
</script>
<noscript>
<img width="39" height="25" src="http://logv28.xiti.com/hit.xiti?s=XXXXXX&p=$1" alt="A
nalyse d\'audience">
</noscript>
</a>');
Une question reste à résoudre : Si $FulName est un MotWiki, cela fonctionne bien. Mais si ce n'est pas le cas, l'antiquote est conservée et apparaît dans le nom de la page.
Pour la partie JavaScript, l'on peut s'en sortir ainsi :
Xt_i += \'src="http://logv28.xiti.com/hit.xiti?\'+Xt_param.replace(/`/, \'\');
Pour la partie <noscript>, je n'ai pas encore trouvé…

Balise PayPal

PayPal France est la division française de PayPal et permet d'effectuer des transferts électroniques d'argent en toute (?) sécurité. Il est très fréquent de mettre un bouton "Faire un don" qui permet, sur un site gratuit, de laisser une contribution.

Lorsque l'on souhaite faire un don, PayPal fournit un code <FORM> pour déclencher l'affichage de la page ad hoc sur leur site, en ayant déjà prérempli les informations utiles.

Voici l'exemple que j'ai mis sur mon site (merci à Hans, l'auteur de FixFlow, qui m'a envoyé sa version) :

Markup('paypal', '>block', '/\\(:paypal consowiki:\\)/', '
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" />
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business" value="Finance@consowiki.org" />
<input type="hidden" name="item_name" value="ConsoWiki" />
<input type="hidden" name="page_style" value="PayPal" />
<input type="hidden" name="no_shipping" value="1" />
<input type="hidden" name="return" value="http://ConsoWiki.org/index.php?n=ConsoWiki.M
erci" />
<input type="hidden" name="cancel_return" value="http://ConsoWiki.org/index.php?n=Cons
oWiki.Dommage" />
<input type="hidden" name="currency_code" value="EUR" />
<input type="hidden" name="tax" value="0" />
<input type="hidden" name="lc" value="FR" />
<input type="hidden" name="bn" value="PP-DonationsBF" />
<input type="image" src="https://www.paypal.com/fr_FR/i/btn/x-click-but04.gif" border="
0" name="submit" alt="Effectuez vos paiements via PayPal&nbsp;: une solution rapide, gr
atuite et sécurisée&nbsp;!" />
</form />');

Les questions et mises à jour au sujet de cette page sont vivement appréciées, vous pouvez les envoyer à Pm?, pmwiki-users (en anglais).


<< Configurer les liens InterMap | Index de la documentation | Styles Wiki personnalisés >>


Traduction de PmWiki.CustomMarkup Page originale sur PmWikiFr.CustomMarkup - Référencé par
Dernières modifications:
PmWikiFr.CustomMarkup: 12/05/2010
PmWiki.CustomMarkup: 22/03/2011