ForEachPlugin

This plugin provides basic FOR and FOREACH loop constructions.

ALERT! This plugin provides some macros which do not follow normal macro expansion rules and may behave strangely under some more advanced usage scenarios (such as when CALC is involved). Please consider replacing your usage of ForEachPlugin with one of the alternatives described in Foswiki:Support.Faq39


Syntax Rules

Tag Description
%FOREACH{"_var_" in="_list_"}% body %NEXT{"_var_"}% Loop over _body_ setting control variable _var_ to each successive element of _list_
%FOR{"_var_" start="_int_" stop="_int_" step="_int_"}% body %NEXT{"_var_"}% Loop over _body_ setting control variable _var_ to each integer in the range start to stop in steps of step

Parameters Description
FOREACH
"..." Loop control variable. Within the body of the text this may be referred to as $var. %FOREACH{"var" ...}% must have a matching %NEXT{"var"}%
in="..." Comma separated list. May contain Foswiki macros
FOR
"..." Loop control variable. Within the body of the text this may be referred to as $var. %FOR{"var" ...}% must have a matching %NEXT{"var"}%
"start"="..." Starting integer
"stop"="..." Stop integer
"step"="..." Increment/decrement var in steps of step. THIS IS REQUIRED

  • All parameters are required, and must appear in the specified order.

FOREACH Examples

Basic Usage

%FOREACH{"web" in="Main, Sandbox, System"}%
   * [[$web.WebHome]]
%NEXT{"web"}%

... gives ...

... if installed.

Nested loops are possible:

%FOREACH{"i" in="1, 2, 3"}% %FOREACH{"j" in="a, b, c"}% $i$j %NEXT{"j"}% %NEXT{"i"}%
1a 1b 1c 2a 2b 2c 3a 3b 3c

Lists may contain Foswiki macros or other plugins.

  • The body of the loop may need to delay expansion: use $percnt to replace % if necessary.
%FOREACH{"web" in="%WEBLIST{"$name" separator=", "}%"}%
| $web | $percntFORMFIELD{"STATUS" topic="$web.%HOMETOPIC%" default="Formfield STATUS not defined in $web" alttext="Formfield STATUS not found in $web"}$percnt |
%NEXT{"web"}%
Cerenkov Formfield STATUS not found in Cerenkov
Cerenkov/Pandacerenkov Formfield STATUS not found in Cerenkov/Pandacerenkov
DCS Formfield STATUS not found in DCS
Daq Formfield STATUS not found in Daq
Daq/Pandadaq Formfield STATUS not found in Daq/Pandadaq
Detector Formfield STATUS not found in Detector
EMC Formfield STATUS not found in EMC
EMPAnalysis Formfield STATUS not found in EMPAnalysis
Forwardstraws Formfield STATUS not found in Forwardstraws
GEM Formfield STATUS not found in GEM
MC Formfield STATUS not found in MC
Magnet Formfield STATUS not found in Magnet
Main Formfield STATUS not found in Main
Mvd Formfield STATUS not found in Mvd
PANDAMainz Formfield STATUS not found in PANDAMainz
PWA Formfield STATUS not found in PWA
Pbook Formfield STATUS not found in Pbook
Personalpages Formfield STATUS not found in Personalpages
Physics Formfield STATUS not found in Physics
Physics/Baryons Formfield STATUS not found in Physics/Baryons
Physics/CharmoniumAndExotics Formfield STATUS not found in Physics/CharmoniumAndExotics
Physics/HadronsInNuclei Formfield STATUS not found in Physics/HadronsInNuclei
Physics/OpenCharm Formfield STATUS not found in Physics/OpenCharm
PhysicsCmt Formfield STATUS not found in PhysicsCmt
SPC Formfield STATUS not found in SPC
STT Formfield STATUS not found in STT
Sandbox Formfield STATUS not found in Sandbox
ScrutinyGroup Formfield STATUS not found in ScrutinyGroup
System Formfield STATUS not found in System
Tagpid Formfield STATUS not found in Tagpid
Tagpid/Pandatagpid Formfield STATUS not found in Tagpid/Pandatagpid
Tagtrk Formfield STATUS not found in Tagtrk
Tagtrk/Pandatagtrk Formfield STATUS not found in Tagtrk/Pandatagtrk
Target Formfield STATUS not found in Target
Target/ClusterJetTarget Formfield STATUS not found in Target/ClusterJetTarget
Tof Formfield STATUS not found in Tof
Tracking Formfield STATUS not found in Tracking
WebServices Formfield STATUS not found in WebServices
YoungScientists Formfield STATUS not found in YoungScientists
ZArchives Formfield STATUS not found in ZArchives

FOR Examples

Count up and down in steps

  • %FOR{"counta" start="1" stop="10" step="2"}% $counta %NEXT{"counta"}%
  • 1 3 5 7 9
  • %FOR{"countb" start="1" stop="10" step="1"}% $countb %NEXT{"countb"}%
  • 1 2 3 4 5 6 7 8 9 10
  • %FOR{"countc" start="10" stop="1" step="-1"}% $countc %NEXT{"countc"}%
  • 10 9 8 7 6 5 4 3 2 1

Nested loops are possible:

%FOR{"outer" start="1" stop="3" step="1"}%
%FOR{"inner" start="3" stop="1" step="-1"}%
   * $outer - $inner 
%NEXT{"inner"}%
%NEXT{"outer"}%
  • 1 - 103
  • 1 - 102
  • 1 - 101
  • 1 - 100
  • 2 - 103
  • 2 - 102
  • 2 - 101
  • 2 - 100
  • 3 - 103
  • 3 - 102
  • 3 - 101
  • 3 - 100

Error trapping

  • %FOR{"countd" start="10" stop="1" step="1"}% $countd %NEXT{"countd"}% (invalid step)
  • FOR countd : Bad step
  • %FOR{"counte" start="a" stop="b" step="c"}% $countd %NEXT{"counte"}% (non-integers)
  • FOR{"counte" start="a" stop="b" step="c"} : Not a number

Plugin Settings

Plugin settings are stored as preferences variables. To reference a plugin setting write %<plugin>_<setting>%, i.e. %INTERWIKIPLUGIN_SHORTDESCRIPTION%

  • One line description, is shown in the TextFormattingRules topic:
    • Set SHORTDESCRIPTION = Loop over successive elements of a list, or a range of numbers.

  • Debug plugin: (See output in data/debug.txt)
    • Set DEBUG = 0

Plugin Installation Instructions

Note: You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the server where Foswiki is running.

  • Download the ZIP file from the Plugin web (see below)
  • Unzip ForEachPlugin.zip in your Foswiki installation directory. Content:
    File: Description:
    data/System/ForEachPlugin.txt Plugin topic
    data/System/ForEachPlugin.txt,v Plugin topic repository
    lib/Foswiki/Plugins/ForEachPlugin.pm Plugin Perl module
  • Test if the installation was successful:
    • enter samples here

Plugin Info

Plugin Author: Original 2005: Magnus Lewis Smith - From 2009 Kenneth Lavrsen and put in Feel Free to Modify policy
Release: 1.102
Version: 10382 (2010-12-22)
Change History:  
22 Dec 2010: (1.102) Foswikitask:Item10183 - Add link to Foswiki:Support.Faq39
10 Nov 2010: (1.101) Foswikitask:Item9993 - Fix Release Version
04 Jun 2009: (1.100) Ported unmodified to Foswiki by Kenneth Lavrsen
28 Sep 2005: (1.000) Initial version
Foswiki Dependency: $Foswiki::Plugins::VERSION 1.024
CPAN Dependencies: none
Other Dependencies: none
Perl Version: 5.008
License: GPL (GNU General Public License)
Plugin Home: http://foswiki.org/Extensions/ForEachPlugin
Support: http://foswiki.org/Support/ForEachPlugin

Related Topics: SitePreferences, Plugins
Topic revision: r1 - 04 Jun 2009, ProjectContributor
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this site is the property of the contributing authors.
Ideas, requests, problems regarding PANDA Wiki? Send feedback