Recent Changes - Search

Main Menu (edit)

Random Average Blog

Wikis in Plain English

pmwiki.org

Recent Changes Printable View Page History Edit Page

authors, admins (advanced)

Using the (:if:) Directive

The (:if:) directive allows portions of a page to be included or excluded from processing. The generic form of the (:if:) directive is

 (:if cond param:) body (:ifend:)

where "cond" names a condition to be tested (described below), and "param" is a parameter or other argument to the condition.

The built-in conditions include:

 

(:if name PAGENAME:)  -  current page is named "PAGENAME"
(:if group GROUPNAME:)  -  current group is named "GROUPNAME"
(:if auth LEVEL PAGENAME:)  -  viewer is authorized at "LEVEL" where LEVEL can be: read, edit, upload, attr or admin; PAGENAME is optional.
(:if authid:)  -  current viewer is authenticated
(:if true:)  -  always include text
(:if false:)  -  always exclude text (same as a comment)
(:if attachments:)  -  current page has attachments
(:if date DATE:)  -  true if current date is DATE
(:if date DATE..:)  -  true if current date is DATE or later (unlimited)
(:if date DATE1..DATE2:)  -  true if current date is in range DATE1 to DATE2 (inclusive)

dates are in the format yyyy-mm-dd or yyyymmdd

(:if enabled VAR:)  -  true if PHP VAR is true
(:if enabled AuthPw:)  -  true if user has entered any password during the current browser session.
(:if equal STRING1 STRING2:)  -  true if STRING1 equals STRING2
(:if match REG_EXPRESSION:)  -  true if current page name matches the regular expression
(:if exists PAGENAME:)  -  true if the page pagename exists

Negated forms of conditions also work:

 

(:if !attachments:)  -  this page has no attachments
 
(:if ! name PAGENAME:) current page is NOT named "PAGENAME"
(:if name -PAGENAME :)
(:if name !PAGENAME :)

Any (:if:) automatically terminates the previous one, thus markup can be easily cased (and are not nested):

 (:if enabled AuthPw:)* You're logged in
 (:if auth read:)* You can read
 (:if auth edit:)* You can edit
 (:if auth upload:)* You can upload
 (:ifend:)

Using wildcard placeholders

The character * can be used as a wildcard to represent any character, zero, one or multiple times.
The character ? can be used as a wildcard to represent any character exactly one time.
Wildcard characters (* and ?) can be used in conditional markup, thus:

 

(:if name PmCal.2005* :)  -  current page is in group Pm Cal? and begins with 2005
(:if group PmWiki* :)  -  current page is in group Pm Wiki or a group beginning with Pmwiki
(:if name Profiles.*,-Profiles.Profiles :)  -  current page is in group Profiles but not Profiles.Profiles

Combining conditions

Conditions (as previously defined) may be combined into more complex conditional expressions using one of these three equivalent forms:

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

Conditions are combined into expressions with boolean operators and brackets. In the next table, A and B are either regular conditions or bracketed sub-expressions of regular conditions:

ExpressionOperatorResult
A and BAndTRUE if both A and B are TRUE.
A or BOrTRUE if either A or B is TRUE.
A xor BXorTRUE if either A or B is TRUE, but not both.
! ANotTRUE if A is not TRUE.
A && BAndTRUE if both A and B are TRUE.
A || BOrTRUE if either A or B is TRUE.

Nota:

  • Spaces around operators and brackets are required.
  • No specific feedback is given for syntaxic errors or unbalanced brackets.

Thus, writing:

 (:if expr auth admin || auth attr || auth edit :)
 [[Logout -> {$Name}?action=logout]]
 (:if:)

provides you a logout link only when authentified with rights higher than 'read'.

admins (advanced)

Creating new conditions

See Cookbook:ConditionalMarkupSamples.

<< InterMap | DocumentationIndex | Page variables >>


This page may have a more recent version on pmwiki.org: PmWiki:ConditionalMarkup, and a talk page: PmWiki:ConditionalMarkup-Talk.

Edit Page - Page History - Printable View - Recent Changes - Search
Page last modified on October 22, 2009, at 09:57 PM by DoyceTesterman

Creative Commons License
This work is licensed under a Creative Commons License.