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 :

  • Les espaces autour des opérateurs et des crochets sont obligatoires.
  • Il n'y a pas de messages d'erreur en cas de fautes de syntaxe.
  • Utilisez des parenthèses et non des crochets pour les conditions internes d'une expression complexe.

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 >>


Traduction de PmWiki.ConditionalMarkup Page originale sur PmWikiFr.ConditionalMarkup - Référencé par
Dernières modifications:
PmWikiFr.ConditionalMarkup: 10 September 2011 à 17h40
PmWiki.ConditionalMarkup: 10 September 2011 à 18h08