From Actux Wiki

PmWikiFr: Affichage conditionnel

Utilisation de la directive (:if:)

La directive (:if:) permet à certaines portions de la page d'être incluses ou exclues du traitement. La forme générique de la directive (:if:) est

(:if cond param:) contenu (:ifend:)
(:if cond param:) contenu (:else:) contenu (:ifend:)
(:if cond param:) contenu (:elseif cond param:) contenu (:ifend:)

où "cond" est une condition à tester, et "param" est un paramètre ou autre argument du test.

Écriture raccourcie

La balise (:if:) termine automatiquement la précédente, et on peut utiliser (:if:) au lieu de (:ifend:) :

(:if cond1:) cond1 est vraie (:if:)
(:if cond1:) cond1 est vraie (:if cond2:) cond2 est vraie (:if:)

Cette ligne ci-dessus est identique à :

(:if cond1:) cond1 est vraie (:ifend:)(:if cond2:) cond2 est vraie (:ifend:)

Conditions prédéfinies

Les conditions prédéfinies par défaut dans PmWiki sont:

(:if name NOMDEPAGE:)
La page courante est nommée "NOMDEPAGE"
(:if group NOMDEGROUPE:)
Le groupe courant est nommé "NOMDEGROUPE"
(:if auth ACTION NomDePage:)
L'utilisateur peut effectuer telle ACTION pour la page NomDePage. ACTION peut être : read, edit, upload, attr ou admin. NomDePage est optionnel, s'il manque, il s'agit de la page en cours.
(:if authid:)
L'utilisateur actuel est authentifié
(:if true:)
Toujours inclure le texte
(:if false:)
Toujours exclure le texte (pareil qu'un commentaire)
(:if attachments:)
La page courante possède des fichiers joints
(:if date DATE1..DATE2]:)
La date courante est comprise dans l'intervalle de DATE1 et DATE2. (Les dates ont la forme yyyy-mm-dd ou yyyymmdd.)
(:if date 2009-09-01:) vraie si c'est le 1er septembre 2009
(:if date 20090901..:) vraie si c'est après le 1er septembre
(:if date 20090901..20091231:) vraie si c'est entre 01/09 et 31/12
(:if enabled VARIABLE:)
vraie si la variable PHP, ou variable dans local/config.php ou un dans module, est définie et non-zéro.
(:if equal "CHAÎNE1" "CHAÎNE2":)
vraie si la CHAÎNE1 est égale à la CHAÎNE2
(:if match REG_EXPRESSION:)
vraie si le nom de la page correspond à l'expression régulière
(:if exists NOMDEPAGE:)
vraie si NOMDEPAGE existe
(:if action ACTION:)
vraie si l'action actuelle est ACTION (peut être browse, edit, upload, diff, print, etc.)

Les formes négatives de conditions fonctionnent également.

(:if !attachments:)
Cette page ne possède pas de fichiers joints
(:if ! name NOMDEPAGE:)
(:if name !NOMDEPAGE:)
(:if name -NOMDEPAGE:)
Cette page n'est pas NOMDEPAGE

N'importe quel (:if:) termine automatiquement le précédent, ainsi les balises peuvent être facilement empilées:

    (:if auth read:)* Vous pouvez lire
    (:if auth edit:)* Vous pouvez éditer
    (:if auth upload:)* Vous pouvez télécharger
    (:ifend:)

Conditions imbriquées

Les conditions peuvent être imbriquées (depuis version 2.2.beta 66).

Les balises (:if:) imbriquées fonctionnent comme les blocs (:div:) imbriqués. Il est nécessaire d'ajouter un nombre aux if-else-endif correspondants :

(:if cond1:)
  cond1 est vraie
  (:if2 cond2:)
     cond1 et cond2 sont vraies
  (:else2:)
     cond1 est vraie, cond2 ne l'est pas
  (:if2end:)
(:else:)
  cond1 n'est pas vraie, cond2 est sans importance
(:ifend:)

Note: des espaces ont été ajoutés pour une meilleure lisibilité.

Utiliser des Jokers (métacaractères)

Le métacaractère * représente n'importe quel caractère, zéro, un ou plusieurs fois. Le métacaractère ? représente n'importe quel caractère, exactement une fois.

Ces deux "jokers" peuvent être utilisés avec les conditions name et group dans les balises conditionnelles. Ainsi,

(:if name Blog.2009* :)
La page en cours est dans le WikiGroupe "Blog" et son nom commence par 2005.
(:if group PmWiki* :)
Le groupe en cours est PmWiki, ou commence par PmWiki, par exemple PmWikiFr.
(:if name Profils.*,-Profils.Profils :)
La page est dans le groupe Profils, mais n'est pas Profils.Profils

Expressions conditionnelles combinées

Les conditions décrites dans cette page peuvent être combinées en expressions plus complexes avec les formes suivantes:

(:if expr EXPRESSION :)
(:if [ EXPRESSION ] :)
(:if ( EXPRESSION ) :)

Les conditions sont combinées par des opérateurs booléens et des crochets. Dans le tableau suivant, A et B sont soit des conditions.

ExpressionOperateurResultat
A and B
A && B
ETVRAIE si A et B sont vraies.
A or B
A || B
OUVRAIE si A ou B est vraie.
A xor BOU exclusifVRAIE si soit A, soit B est vraie, mais pas les deux.
! ANégationVRAIE si A n'est pas vraie.

Exemple

(:if [ name UnePage and group UnGroupe ]:)
est équivalent à (:if name UnGroupe.UnePage:)

Notes :

L'expression suivante affichera le contenu seulement si l'utilisateur est administrateur, ou s'il est authentifié et la date est après le 2009-06-01 :

(:if [ auth admin || ( authid && date 2009-06-01.. ) ] :)

Créer des nouvelles conditions

Voir Cookbook:ConditionalMarkupSamples (en anglais).


<< Liens InterMap | Index de la documentation | Variables de page >>

Récupéré sur http://actux.eu.org/wiki/PmWikiFr/ConditionalMarkup
Page mise à jour le 23/08/2009 01:55