RenderFormPlugin
The
RenderFormPlugin handles the tag %RENDERFORM{...}%. The tag will be replaced by a form that is defined and looks like
DataForms. It helps you to create a new topic with
DataForms or to edit or view existing topic form data. The form data can be changed without pushing the topic edit button. The tag can be used at any topic to show, edit or create
DataForms data from any other topic.
Features:
- easy to use: 1. define a form, 2. put the %RENDERFORM{...}% tag on a topic (you do not need to register a form or edit a page to add the form to a topic)
- supports all form field types of DataForms (text, textarea, checkbox, checkbox+buttons , date, select, select+multi, radio, label)
- supports 3 modes (
mode
option): create (default), edit, view (default if a topic exists)
- mode switching: edit to view and view to edit
- simple JavaScript based form field validator for mandatory fields
- hide some form fields (
hidden
option)
- change display order of form fields (
order
option)
- use URL parameters to override options (query parameter names:
rfp_<attribute>
)
- define your own (mode dependent) form layout (
layout
option)
Example (image):
Syntax Rules
- Usage:
%RENDERFORM{attr1="val1" attr2="val2" ...}%
- Example:
%RENDERFORM{"DataFormDefinition"}% (=%RENDERFORM{form="DataFormDefinition"}%
)
Quick Start Guide
- Create a new topic (e.g. TestForm?) for your DataForms definition and put the following to the new topic ( EditTablePlugin required):
%EDITTABLE{format="|text,20,|select,1,label,text,textarea,select,select+multi,checkbox,checkbox+buttons,radio,date|text,6,1|text,50|text,20|text,5,|"}%
| *Name* | *Type* | *Size* | *Values* | *Tooltip message* | *Attributes* |
- Add some new rows to your DataForms definition by editing the definition table.
- Create a new topic (e.g. MyTestTopic?) and put the following to this new topic:
%RENDERFORM{"MyTestForm"}%
%SEARCH{search="MyTestTopic\d+" scope="topic" type="regex"}%
- Have fun by creating new topics with forms (e.g. topic names: MyTestTopic0?, MyTestTopic1?, ...).
Usage Examples
Simple Help Desk
- SimpleHelpDeskForm? topic:
| *Name* | *Type* | *Size* | *Values* | *Tooltip message* | *Attributes* |
| Question | text | 80 | | | M |
| Details | textarea | 80x10 | | please fill in some details ... | |
| Answer | textarea | 80x10 | | Answer | |
| State | select | 1 | open,closed | | |
- SimpleHelpDesk? topic:
%RENDERFORM{"SimpleHelpDeskForm" hidden="Answer,State" createbutton="submit" hideheader="yes" text="Back to !SimpleHelpDesk"}%
| *Question* | *Date* | *State* |
%SEARCH{search="SimpleHelpDesk\d+" scope="topic" type="regex" nonoise="on" format="| <a href=\"SimpleHelpDesk?rfp_topic=$topic;rfp_hidden=;rfp_hideheader=off\">$formfield(Question)</a> | $date | $formfield(State) |"}%
%TOPIC%
Nice Help Desk
- NiceHelpDeskForm? topic:
| *Name* | *Type* | *Size* | *Values* | *Tooltip message* | *Attributes* |
| Question | text | 80 | | | M |
| Details | textarea | 80x10 | | please fill in some details ... | |
| Answer | textarea | 80x10 | | Answer | |
| State | select | 1 | open,closed | | |
- NiceHelpDeskTemplate?:
%TOC%
---++ Question: %FORMFIELD{"Question"}% - State: %FORMFIELD{"State"}%
Details:
<pre>
%FORMFIELD{"Details" default="no details"}%
</pre>
---++ Answer
%FORMFIELD{"Answer" default="no answer yet"}%
---++ Comments
%COMMENT{type="threadmode"}%
- NiceHelpDesk? topic:
%RENDERFORM{"NiceHelpDeskForm" templatetopic="NiceHelpDeskTemplate" hidden="Answer,State" createbutton="submit" hideheader="yes"}%
| *Question* | *Date* | *State* | *Action* |
%SEARCH{search="NiceHelpDesk\d+" scope="topic" type="regex" nonoise="on" format="| [[$topic][$formfield(Question)]]| $date | $formfield(State) | <a href=\"NiceHelpDesk?rfp_topic=$topic;rfp_hidden=;rfp_hideheader=off\" title=\"View form data\">[V]</a> <a href=\"NiceHelpDesk?rfp_topic=$topic;rfp_hidden=;rfp_hideheader=off;rfp_mode=edit\" title=\"edit form data\">[E]</a> | "}%
%TOPIC%
Attributes
Attribute |
Description |
Default / Example |
dateformat |
overrides the JSCALENDARDATEFORMAT preference for date fields |
dateformat="%d %b %Y" |
donotnotify |
disables notifications |
undefined / donotnotify="on" |
form |
(required attribute) a name of a topic with a DataForms definition |
undefined / form="MyTestForm" |
hidden |
a comma separated list of form field names to hide in all modes |
undefined / hidden="Field1,Field2" |
hideheader |
if set, disables the form header |
hideheader="no" |
layout |
a topic with a layout (see Form Layout section); syntax: layout="<topic>#<layout name>"; if layout name is omitted a default layout will be taken |
undefined / layout="TestFormLayout#test1" |
mode |
render mode of the form, allowed values: create (default), edit, view (default if topic exists) |
mode="create" |
onlynewtopic |
disables overwrite of existing topics |
onlynewtopic="on" |
onlywikiname |
disallows the usage of non-WikiWords for topic names |
onlywikiname="on" |
order |
changes the display order of form fields; order value is a comma separated list of field names; if the order list is incomplete all missing and unhidden form fields will be added; there are special values for order: [:alpha:], [:dalpha:], [:num:] and [:dnum:], e.g. order="[:alpha:]" to sort all fields alphanumerical |
undefined / order="Field1, Field2" |
script |
changes the behavior of edit/create modes; allowed values: save - saves the form data; edit - edit the resulting topic |
script="save" |
template |
a template name for predefined attributes |
undefined / template="helpdesk" |
templatetopic |
a template topic; useful for the create mode |
undefined / templatetopic="MyHelpDeskTopicTemplate" |
text |
the topic text; text will be ignored if a templatetopic is defined |
undefined / text="my small topic text" |
topic |
an existing topic for edit and view mode or a topic template name for a new topic (create mode) (e.g. TestFormDataXXXXXXXXXX) |
topic="%TOPIC%XXXXXXXXXX" / topic="TestFormData%SERVERTIME{$epoch}%" |
topicparent |
a topic parent; useful for the create mode; if undefined the form topic will be used |
topicparent="%WEB%.%TOPIC%" / topicparent="MyHelpDesk" |
Form Layout
Usage:
%RENDERFORM{"<form definition>" ... layout="<layout topic>"}%
-or-
%RENDERFORM{"<form definition>" ... layout="<layout topic>#<layout name>"}%
Following tags are reserved and replaced by ... |
Tag |
Replaced by |
@FORMTOPIC@ |
the form topic name |
@OPTION(<attribute name>)@ |
the attribute value, e.g. @OPTION(mode)@ |
@SUBMIT@ |
a submit button or empty string in view mode (hint: change the button text with the createbutton or editbutton attributes) |
@SWITCH@ |
a link to switch between edit and view mode |
@TOPIC@ |
the (target) topic name of the topic with a form |
Hints:
- The default field marker '@' can be changed with the
fieldmarker
attribute.
- Put the complete layout definition between
<verbatim>...</verbatim>
tags to make the definition visible in the topic view.
Form Layout Example:
<verbatim>
%STARTRENDERFORMLAYOUT%
| *@TOPIC@@SWITCH@ / @FORM@*||
| Question%RED%*%ENDCOLOR% | @Question@ |
| Details | @Details@ |
| %RED%*%ENDCOLOR% indicates mandatory fields||
@SUBMIT@
%STOPRENDERFORMLAYOUT%
</verbatim>
Examples
Name |
Type |
Size |
Values |
Tooltip message |
Attributes |
Label |
label |
0 |
an example |
label tooltip |
Text |
text |
10 |
|
text tooltip |
M |
Textarea |
textarea |
10x2 |
|
textarea tooltip |
|
Select |
select |
1 |
,1,2 |
select tooltip |
|
Select+Multi |
select+multi |
5 |
1,2,3,4,5 |
select+multi tooltip |
|
Checkbox |
checkbox |
2 |
1,2,3,4,5 |
checkbox tooltip |
|
Checkbox+Buttons |
checkbox+buttons |
3 |
1,2,3,4,5 |
checkbox+buttons tooltip |
|
Radio |
radio |
4 |
1,2,3,4,5,6,7,8,9 |
radio tooltip |
|
Date |
date |
20 |
|
date tooltip |
|
%RENDERFORM{"System.RenderFormPluginExampleForm" topic="Sandbox.RenderFormPluginXXXXXXXXXX"}%
Plugin Settings
Plugin settings are stored as preferences variables. To reference
a plugin setting write
%<plugin>_<ATTRIBUTENAME>%
to your
SitePreferences topic, i.e.
%RENDERFORM_SHORTDESCRIPTION%
You can also use template based preferences, just write
RENDERFORM_TEMPLATE_<templatename>_<ATTRIBUTENAME>
.
- One line description, is shown in the TextFormattingRules topic:
- Set SHORTDESCRIPTION = Create new topics with simple forms like DataForms.
- Debug plugin: (See output in
data/debug.txt
)
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 Foswiki server.
- Download the ZIP file from the Plugin Home (see below)
- Unzip
RenderFormPlugin.zip
in your Foswiki installation directory. Content: File: | Description: |
data/Projekte/Projekte/System/RenderFormPlugin.txt | Plugin topic |
data/Projekte/Projekte/System/VarRENDERFORM.txt | Plugin Variables topic |
data/Projekte/Projekte/System/RenderFormPluginExampleForm.txt | Example form |
pub/Projekte/Projekte/System/RenderFormPlugin/example.gif | Example image |
lib/Foswiki/Plugins/RenderFormPlugin.pm | Plugin Perl module |
lib/Foswiki/Plugins/RenderFormPlugin/Core.pm | Plugin Perl module |
- Configure the Plugin:
- Run the configure script to enable the Plugin
- Change the Plugin settings as needed
- Test if the installation was successful:
Plugin Info