key Log In

You are here: wiki.fini > TWiki Web > IfDefinedPlugin

Start of topic | Skip to actions

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

Plugin Author: TWiki:Main.MichaelDaum
Copyright ©: 2006, Michael Daum
License: GPL (GNU General Public License)
Plugin Version: v0.91
Change History:  
10 Mar 2006: added as parameter; added escape parameters and recursive variable expansion to the condition argument which helps to circumvent problems due to different plugin orders
21 Feb 2006: Initial version
CPAN Dependencies: none
Other Dependencies: none
Perl Version: 5.8
TWiki:Plugins/Benchmark: GoodStyle nn%, FormattedSearch nn%, IfDefinedPlugin nn%
Plugin Home: TWiki:Plugins/IfDefinedPlugin
Feedback: TWiki:Plugins/IfDefinedPluginDev

-- TWiki:Main.MichaelDaum - 10 Mar 2006

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding wiki.fini? Send feedback
Note: Please contribute updates to this topic on TWiki.org at TWiki:TWiki.IfDefinedPlugin