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

Note that (:if:) without parameters and (:ifend:) are identical. Also note that (:if cond:) automatically closes a previous conditional. For nested multiple levels, see Nested conditionals.

Built-in Conditions

The built-in conditions include:

(:if name PAGENAME:)

-

current page is named "PAGENAME" or "GROUPNAME.PAGENAME"

(:if group GROUPNAME:)

-

current group is named "GROUPNAME"

(:if auth LEVEL PAGENAME:)

-

viewer is authorized - meaning "what they are allowed to do" - matches a "LEVEL" where LEVEL can be: read, edit, upload, attr or admin; PAGENAME is optional.

This is mostly used to hide and show portions of the interface only useful to editors or admins.
Security warning: Neither this nor any other condition is meant to hide secrets. Conditions may easily be circumvented in many cases, as described in Passwords.
See also: Security, PITS:01417.

(:if authid:)

-

current viewer is authenticated - meaning they have proven who they are via login - to use this the wiki must include recipe AuthUser or others which set the $AuthId variable.

(:if enabled InvalidLogin:)

-

username and password not authenticated. To use this the wiki must include recipe Cookbook:AuthUser.

PAGENAME has one or more attachments among the specified. A pagename can be omitted, in that case the current page is implied.

FILENAMES specify an attachment like "pic1.jpg" or attachment patterns separated by commas, like "pic*.jpg,*.png" where asterisk (*) means "anything"; if omitted, any attachment (i.e. "*") is implied. If used in a sidebar, header, or footer, and the PAGENAME is not specified, the condition applies to the main page. e.g. (:if attachments "*.png,*.gif" Groupname.PageName:)

The name and group conditionals will work even for an included page, as the "name" and "group" conditionals always check the currently displayed page, as opposed to the page that the markup appears in.

Note: Although there is no built-in conditional markup to test ?action=, you can use (:if equal {$Action} ACTION:)
to test what the current action being requested is.

Concatenated conditions

In some cases where built in conditions have a parameter the parameters may be concatenated using a comma, viz:

(:if name Name1,Name2,-Name3:)

(:if group -Group1,Group2,Group3:)

Negated Conditions

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 group -GROUPNAME1,-GROUPNAME2 :)

-

group is not named "GROUPNAME1" or "GROUPNAME2"

Nesting Conditions

Note that (:if cond:) automatically closes a previous conditional. Thus, the following two examples have identical meaning:

Conditions can be nested from 2.2.beta 66. To have nested conditionals you need to number the if, and the matching else/ifend:

(:if cond1:)
cond1 is true
(:if2 cond2:)
cond1 and cond2 are true
(:elseif2 cond3:)
cond1 and cond3 are true, cond2 is not
(:else2:)
cond1 is true, cond2 and cond3 are not
(:if2end:)
(:else:)
cond1 is false, cond2 testing was ignored
(:ifend:)

Spaces were added for better readability.

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 once.Wildcard characters (* and ?) can be used with the name and group conditional markups, thus:

Page text variables (PTVs), page variables (PVs) and markup expressions can be used in conditional markup. They will be assigned/evaluated before the condition(s).

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 (round-)bracketed sub-expressions of regular conditions:

Expression

Operator

Result

A and B

And

TRUE if both A and B are TRUE.

A or B

Or

TRUE if either A or B is TRUE.

A xor B

Xor

TRUE if either A or B is TRUE, but not both.

! A

Not

TRUE if A is not TRUE.

A && B

And

TRUE if both A and B are TRUE.

A || B

Or

TRUE if either A or B is TRUE.

Example

(:if [ name SomePage and group SomeGroup ]:) equivalent to (:if name SomeGroup.SomePage:)

Important Notes:

Spaces are required around operators and brackets.

No specific feedback is given for syntax errors or unbalanced brackets.

Use round brackets (not square) for nested expressions.

Thus, the following is a valid way of building an expression that shows the following contents only when the user is either the administrator, or is logged in and the time is later than the given date: