Table of Contents
- Introduction
- Information Tags
- String Tags
- Variable Tags
- URL Tags
- If Tags

  | · Introduction · if · else · elseif · elif · true · false

- Graphics Tags
- Database Tags
- Programming Tags
- Supports System
- SSI
- htaccess
- Image Maps
- Appendix

<if> ... </if> |

`<if>` is defined in the Main RXML parser module.

`<if>` is used to conditionally show its contents. `<else>`, `<elif>` or `<elseif>` can be used to suggest alternative content.

It is possible to use glob patterns in almost all attributes, where * means match zero or more characters while ? matches one character. * Thus `t*f??` will match `trainfoo` as well as * `tfoo` but not `trainfork` or `tfo`.

Attributes |
accept, config, cookie, date, defined, domain, eval, exists, filename, host, language, match, name, prestate, referrer, supports, time, user, variable, after, and, before, file, group, inclusive, wwwfile, not, or,

Attributes

`accept`=type1[,type2,...]
  Returns true is the browser accept certain content types as specified by it's Accept-header, for example image/jpeg or text/html. If browser states that it accepts */* that is not taken in to account as this is always untrue.

`config`=name
  Has the config been set by use of the `<aconf>` tag?

`cookie`=name[ is value]
  Does the cookie exist and if value is given, does it contain the value value?

`date`=yyyymmdd
  Is the date yyyymmdd? The attributes `before`, `after` and `inclusive` modifies the behavior.

`defined`=define
  Is the define defined?

`domain`=pattern[,pattern...]
  Does the users computer's DNS name match any of the patterns? Note that domain names are resolved asynchronously, and the the first time someone accesses a page, the domain name will probably not have been resolved.

`eval`=RXML expression
  Returns true if `RXML expression` returns a string that evaluates to true if casted to an integer in Pike, i.e. the string begins with 1-9 or a number of zeroes followed by 1-7 (octal greater than zero). Future versions of Roxen (starting from version 1.4) will evaluate to true on a number of zeroes followed by 1-9 (decimal greater than zero).

`exists`=path
  Returns true if the file `path` exists. If `path` does not begin with /, it is assumed to be a URL relative to the directory containing the page with the `<if>`-statement.

`filename`=filepattern1[,filepattern2,...]
  Returns true if the current page is among the listed filepatterns.

`host`=pattern[,pattern...]
  Does the users computers IP address match any of the patterns?

`language`=language1[,lang2,...]
  Does the client prefer one of the languages listed, as specified by the `Accept-Language` header?

`match`=string[ is pattern[,pattern,...]]
  Does the string match one of the patterns?

`name`=pattern[,pattern...]
  Does the full name of the browser match any of the patterns?

`prestate`=option1[,option2, ...]
  Are all of the specified prestate options present in the URL?

`referrer`=[=pattern[,pattern,...]]
  Does the referrer header match any of the patterns?

`supports`=feature
  Does the browser support this feature? See the support feature page page for a list of all available features.

`time`=ttmm
  Is the date ttmm? The attributes `before`, `after` and `inclusive` modifies the behavior.

`user`=name[,name,...]|any
  Has the user been authenticated as one of these users? If any is given as argument, any authenticated user will do.

`variable`=name[ is pattern]
  Does the variable exist and, optionally, does it's content match the pattern?

Modifier Attributes

`after`
  Used together with the `date` attribute.

`and`
  If several conditional attributes are given all must be true for the contents to be shown. This is the default behavior.

`before`
  Used together with the `date` attribute.

`file`=path
  Used together with the `user` attribute. An external file will be used to authenticate the user, rather than the current Authentication module. The file should have the following format:

      user name : encrypted password
      user name : encrypted password

  Unless the `wwwfile` attribute is given the path is a path in the computers real file system, rather than Challenger's virtual file system.

`group`=group, groupfile path
  Used together with the `user` attribute to check if the current user is a member of the group according the the groupfile. The groupfile is of the following format:

      group : user1, user2, user3
      group : user4

`inclusive`
  Used together with the `date` and `before` or `after` attributes. The contents will also be shown if the date is the current date.

`wwwfile`
  Used together with the `file` attribute to indicate what Challenger's virtual file system should be used to find the password file. This might be a security hazard, since anyone will be able to read the password file.

`not`
  Inverts the results of all tests.

`or`
  If several conditional attributes are given, only one of them has to be true for the contents to be shown.

Complex expressions

You might be tempted to write expressions like:

`<if variable="foo is bar" or variable="bar is foo">Something</if>`

This will not work, as you can only use an attribute once.

Another common problem is a misconception of how the `and`, `or` and `not` attributes work.

`<if user=foo or not domain="*.foobar.com">...</if>`

will not work since the `not` attribute negates the whole tag, not just the `domain` attribute.

Example

source code

    <if supports=tables>
    Your browser supports tables.
    </if>

result |

source code

    <if user=any>
    You are logged in.
    </if>
    <else>
    You are not logged in.
    </else>

result | You are not logged in.

source code

    <if date=20000101 before>
    The year 2000 is yet to come.
    </if>

result | The year 2000 is yet to come.

</dump_if not cookie=rxml-help>