IfDefinedPlugin
Description
This plugin adds a couple of tags that allow to render content conditionally.
There are two different ways to do that: either by using the inline
%IFDEFINED{"string" then="..." else="..."}%
tag that returns the
then
or
else
argument depending on the
string
being defined, that is non-empty.
There are no other ways to deceide the condition but rendering the
string
argument
using TWikiML, for example by embedding a
%CALC{}%
expression. This simplifies
this plugin alot and allows a rather flexible way to generate the condition.
The other way is to use blocks of content surrounded by expressions like this:
%IFDEFINEDTHEN{"string"}%
...
%ELSIFDEFINED{"string"}%
...
%ELSEDEFINED%
...
%FIDEFINED%
This way conditioning content is not limited to fit into a TWikiML argument
as it is the case using an inline IFDEFINED tag. Blocked conditions can be nested
and are evaluated starting from the outside, contrary to standard TWikiML being
evaluated left-to-right-inside-out.
Related work
Similar extensions have been done before but are either only available as an integral part of TWiki-4.0
(see
TWiki:TWiki04/IfStatements) or unmaintained (see
TWiki:Plugins/ConditionalPlugin).
Especially these two alternatives are rather similar as they defined the same tag (%IF).
The main differences between those and this plugin here is that they have a more elaborated
conditon parser that allows to evaluate more complex boolean expressions. Some of the
expressions in %IF of TWiki-4.0 are specific to that platform and make only sense there
(context). The other difference is that the IFDEFINED tag family allows nested blocks of
conditional content and %IF is an inline tag only.
The advantage of this plugin is that you get a simpler mechanism for checking the condition
which is however more flexible as the string can be generated arbitrarily using TWikiML.
Furthermore, and possibly more important, this plugin is backwards compatible and may be used
on a TWiki/Beijing, TWiki/Cairo and TWiki/Dakar engine.
This plugin has been externalized from the
TWiki:Plugins/NatSkinPlugin.
Syntax Rules
IFDEFINED
Syntax:
%IFDEFINED{"<TWikiML>"
[action="view,edit,preview,..."]?
[as="..."]
then="..."
else="..."
glue="on,off"}%
returns the "then" or "else" content depeinding on the <TWikiML>
expression expanding to the emtpy string or to the string given in "as".
Optionally the current topic action is checked to match the given one. This
tag works similar to the IfStatements in dakar but is backwards compatible
to beijing and cairo and omits the overhead of an expression parser.
IFDEFINEDTHEN, ELSIFDEFINED, ELSEDEFINED, FIDEFINED
Syntax:
%IFDEFINEDTHEN{"<TWikiML>" [action="view,edit,preview,..."]?}%
<then content>
[%ELSIFDEFINED{...}%
<elsif content>]*
[%ELSEDEFINED%
<else content>]?
%FIDEFINED%
This is the multi-line version of
IFSDEFINED.
IFDEFINEDTHEN expressions can be nested safely. Within a single IFDEFINEDTHEN
the ELSIFDEFINED parts can be repeated arbitrarily. Before rendering the
<then|elsif|else condition>
any
$nop
string will be removed first.
Thereby nested TWikiML expressions can be prevented from being expanded in
advance.
Demo
- Set FOO = foo
- FOO is defined.
- FOO is not defined as "bar".
- BAR is not defined.
Plugin Settings
- Set SHORTDESCRIPTION = Render content conditionally
Plugin Installation Instructions
- Download the ZIP file from the Plugin web (see below)
- Unzip
IfDefinedPlugin.zip
in your twiki installation directory. Content: File: | Description: |
data/TWiki/IfDefinedPlugin.txt | Plugin topic |
lib/TWiki/Plugins/IfDefinedPlugin.pm | Plugin Perl module |
Plugin Info
--
TWiki:Main.MichaelDaum - 10 Mar 2006