cross
New Foswiki release 2.1.6 is available with important security fixes.
Sourceforge foswiki email lists being discontinued. Subscribe to the new Foswiki announce and discuss lists at MailingLists

Pass data from an INCLUDEd topic

  • Tip Category - Developing Wiki Applications
  • Tip Added By - RichMorin - 29 Sep 2009 - 20:58
  • Extensions Used - SpreadSheetPlugin
  • Useful To - Beginners
  • Tip Status - New
  • Related Topics -

Problem

You want to pass data to the current topic from an INCLUDEd topic.

Context

The included topic collects and/or generates some information. The including topic needs to get access to the data, for further scripting. Ordinary user-defined TML variables are not returned from included files. (This is considered to be a "feature")

Solution

There are at least two ways to do this; both use SpreadSheetPlugin.

$SET/$GET

SpreadSheetPlugin's variables are accessible by the calling topic. So, you can use $SET in the included topic:
%CALC{"$SET(Bar, 21)"}% 
%CALC{"$SET(Foo, 42)"}% 

and $GET in the including topic:
%INCLUDE{FooPage}%
%CALC{"$GET(Bar)"}% is less than %CALC{"$GET(Foo)"}%.

This should yield: 21 is less than 42.

Generate a (hidden) table

SpreadSheetPlugin is able to extract data from the most recent table in the current topic. So, have the included topic generate a table:
| Bar | 21|
| Foo | 42|

Now hide it and then extract data from it.
<!--
%INCLUDE{FooPage}%
-->
%CALC{"$T(R1:C2)"}% is less than %CALC{"$T(R2:C2)"}%.

This should yield: 21 is less than 42.

Known Uses

These techniques can be used both within the context of a wiki and when the included page is on another (eg, PHP) server.

Known Limitations

Complex and non-intuitive.

See Also

BestPracticeTipsForm edit

Category Developing Wiki Applications
Related Topics
Topic revision: r5 - 22 Jul 2013, MichaelDaum - This page was cached on 21 Mar 2018 - 13:22.

The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License