Ada Programming $WikiTagline
 

La traduction des balises PmWiki est dfinie par un ensemble de rgles; chaque rgle fait une recherche sur une syntaxe spcifique dans le texte avec balises et remplace celui-ci par un autre texte. De manire interne, ceci est fait en utilisant la fonction PHP "preg_replace(approve sites)".

Les rgles sont ajoutes au moteur de traduction via la fonction de PmWiki Markup(), qui est dfinie comme

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

ou $name est un nom unique (une chane) donne la rgle, $when dit quel moment la rgle doit tre applique relativement aux autres rgles, $pattern est la syntaxe rechercher dans le texte balises, et $replace est ce qui doit remplacer la syntaxe trouve.

Par exemple, le code qui cre la rgle pour ''l'emphase d'un texte'' (dans scripts/stdmarkup.php):

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

Cette dfinition cre une rgle appele "em" qui sera excute avec les autres balises "inline", et la rgle remplace tout texte entre deux paires de guillemets simples avec le mme texte ($1) encadr par <em> et </em>.

Les deux premiers paramtres de la fonction Markup() sont utiliss pour spcifier l'ordre dans laquelle les rgles doivent s'appliquer. Le premier paramtre fournit un nom pour la rgle -- "em" dans l'exemple ci-dessus. Nous aurions pu choisirs d'autres noms comme "''", ou mme "deuxguillemetssimples". En gnral PmWiki utilise la balise elle-mme pour nommer la rgle (c.a.d., PmWiki utilise "''" au lieu de "em"), mais pour faciliter la lecture de cet exemple, on utilise un nom mmorisable.

Le second paramtre dit que la rgle doit tre utilise en mme temps que les autres rgles de balises "inline". PmWiki dcoupe la mthode de traduction en un certain nombre de phases:

   _begin          dbut de la traduction
   fulltext        la traduction est faite sur tout le texte 
   split           dcoupage du texte  balises en lignes
   directives      excution 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, spcifier "inline" pour le second paramtre dit que cette rgle doit tre applique dans la mme phase que les autres rgles "inline". Si nous voulons une rgle qui soit excute avec les directives -- c.a.d., avant que les rgles 'inline' soient excutes, nous aurions spcifi "directives" pour le second paramtre.

Ici une rgle pour le texte @@monospaced@@

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

et pour une directive (:comment ...:) qui est simplement enleve de la sortie:

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

Ok, maintenant propos de la rgle pour '''strong emphasis'''? Nous devons tre prudents ici, parce que mme si cette rgle est applique dans la mme squence que les autres balises 'inline', nous devons aussi tre surs que la rgle pour ''' est excute avant la rgle pour '', parce que ''' contient aussi ''. Le second paramtre de Markup() peut tre utilis pour spcifier les relations de cette nouvelle rgle par rapport aux autres:

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

Ceci cre un rgle appele "strong", et le second paramtre "<em" dit que cette rgle doit tre excute avant la rgle "em" dfinie plus haut. Si nous voulons excuter une chose aprs la rgle "em", nous utilisons ">em" la place. Donc, il est possible d'ajouter des rgles tout moment dans la squence de traduction de balises de PmWiki, ceci d'une manire extensive. (En fait, les squences "inline", "block", "directives", etc., sont justes des rgles de positionnement utilises pour donner une squence gnrale pour les autres rgles. Donc on peut utiliser "<inline" pour spcifier les rgles qui doivent tre excutes avant les autres rgles "inline".).

Si vous voulez dsactiver les balises disponibles, crez une ligne du genre :

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

L'absence de paramtres de syntaxe indique que vous voulez dsactiver la balise.

Les rgles de balises par dfaut de PmWiki sont dfinies dans le fichier scripts/stdmarkup.php. Pour voir la table de traduction complte pendant que le programme tourne, le module scripts/diag.php fournit "?action=ruleset", qui affiche l'ensemble des rgles de balises dans l'ordre d'excution. Vous pouvez voir ceci dans BalisesPersonnalises?action=ruleset.


Voici deux exemples que beaucoup de sites doivent se poser et qu'il n'est pas facile de rsoudre. Dans ces deux cas, j'ai commenc par autoriser les balises HTML ncessaires, mais cela crait un trou dans la scurit. Je suis donc venu aux balises personnalises.

Balise Xiti

Xiti(approve sites) est un systme de statistiques mis disposition des internautes gratuitement (pour les sites sans but trs lucratif, ou en cours de dmarrage), 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 accepts, d'autres informations sont rcupres (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 interprt comme un lien et des balises HTML sont rajoutes) ! 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 coupes 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 rsoudre : Si $FulName est un MotWiki, cela fonctionne bien. Mais si ce n'est pas le cas, l'antiquote est conserve et apparat 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(approve sites)

PayPal France(approve sites) est la division franaise de PayPal(approve sites) et permet d'effectuer des transferts lectroniques d'argent en toute (?) scurit. Il est trs frquent 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(approve sites) fournit un code <FORM> pour dclencher l'affichage de la page ad hoc sur leur site, en ayant dj prrempli 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 scurise&nbsp;!" />
</form />');

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

<< | Index doc admin? | >>