Advanced Capabilities

An overview of the advanced capabilities of Form Reform. For details, please refer to the specific guide pages.

If you are new to Form Reform, you probably want to work through some of the simple examples such as Getting Started - Your first form before coming back here. Don't let the advanced capabilities confuse you.

On this page

Multi-part forms

One of the USPs of Form Reform is flexibility, so it should not be surprising that we have multiple ways of creating multi-part forms. 

Multi-Step Forms

A multi-step form is a form split into multiple steps, where each part is submitted to the server as a distinct step before the next step is shown. Unlike tabbed formsmulti-step forms don't require any assistance from Magic Tabs.

With multi-step forms, the successive parts are contained within one page using the Behaviour tab of the Form Reform blocks and setting new Form States in the Submit handler pipeline.

Form handling can use conditional processing to direct a multi-step form through different routes depending on conditions applied to form inputs and other data.

Multi-Page Forms

A multi-page form is a form where the parts of the form are spread across multiple pages and are, in effect, multiple forms.

With multi-page forms, each part is a separate page and effectively a separate form. Require Form blocks can be added to forms/pages to force dependencies between the parts of the form and Completion List blocks may be used to guide visitors through multi-page forms

For really big or complex forms, multi-page forms may contain multi-part forms within the pages.

See multi-step and multi-page forms.

Saving (or not saving) form submissions

Forms submissions are saved by applying a handler in the form pipeline. You can save a form to a single store, multiple stores, or not save it at all. All of this is managed by adding or removing form save handlers to the pipeline.

You may have a good case for not actually saving a form. For example, GDPR compliance becomes much simpler if you never actually save any data!

With Form Reform you can take advantage of this by configuring form handlers to use any combination of

Location, Address inputs and Geocoding

Form Reform provides specialized input blocks for individual address components such as Country and State with optional IP address lookup, or for whole address lookup using Google.

In the form processing pipeline, there are also form handlers for geocoding for use in situations where it is not practical to gather location data with a form block.

See Geocoding and Address Lookup.

Sending Email

An action commonly required when a form is submitted is to send email:

  • To acknowledge the form submission to the visitor.
  • To alert the administrators of the site that a form has been submitted.

In Form Reform emails are configured by adding one or more Send Email handlers to the form handling pipeline. After a form submission you can send one email to multiple destinations, many different emails, or no emails at all.

Emails may also have files attached, embedded or linked from the web server.

See Sending Email.

Spam detection and input validation

Form Reform has the strongest capabilities for spam detection and prevention.

Spam Detection

For the front end of a form, Form Reform provides specialized blocks for spam detection by adding captchas, validation codes, honey pots and geofencing. 

In the form processing pipeline, a form handler for Spam Detection checks these blocks and other spam detection systems such as IP blacklists.

For the highest degree of spam detection, we also have an integration with Anti Spammer Master via Anti Spammer Master for Form Reform

Input Validation

Spam detection is just one specialized form of input validation. Most Form Reform input blocks provide some configurable validation specific to the functionality of that input.

For example, to require an input, to constrain the length of a text or text-like input, to limit the range of a numeric input, to constrain the number of options checked, to match 'confirm' inputs, to validate emails, URLs and dates.

Wherever practical, this validation is applied in the visitor's browser. When the form is submitted, validation for all blocks in the form is run by adding a Validation handler to the form processing pipeline.

When the Spam Detection or Validation handlers detect a problem, they record error messages which are returned to the visitor by configuring a Message handler in the pipeline. Success and error processing can be separated by adding On Success and On Error handlers to the form processing pipeline.

Input block specific validation is fine, but sometimes a form will need validation across multiple input blocks. The Set Error Conditional handler can be used to compare input values with more complex relationships and add an error when a condition matches.

Form processing can also use Condition If... Else If ... Else ... End If handlers to structure more complex logic in the the form processing pipeline which could be further validation or success actions and to use the Set Error handler to set a specific error message.

Form Structure Validation

When developing complex forms, sometimes it can be useful to know a bit more about what is going on behind the scenes. Are the form names consistent? Has an input name been accidentally duplicated? Is a custom handler working as intended? What {{data_values}} are available at a specific point in the handler pipeline?

Form Reform Developer provides handlers to review and validate the structure of a form. These handlers can help detect such mistakes and provide internal information. The developer handlers can be added to a form during development, then removed once a form is ready.

Combi Inputs

A combi input is of type of input where a form presents some options, but a visitor can also add their own 'other' choice. Form Reform facilitates combi inputs in two fundamentally different ways:

Text Suggestions block

The Text Suggestions block can be used to add some suggestions to any text input. Text Suggestions is not an input block in itself. It provides options which supplement another input block.

The way these suggestions are provided is browser specific and in most cases cannot be styled. However, it is a very flexible way of providing a visitor with some hints about what they can enter into a form.

Checkbox, Radioset and Select combi inputs

Form Reform also provides more conventional combi inputs, where the list of options is extended with an 'Other' choice which, when selected, opens a text input.


The examples below illustrate the available combi inputs. These examples are not part of a live form, they are front-end only. 

Repeatable Groups of Inputs

Repeatable groups of inputs are managed by building the repeatable part of a form within a container, layout or stack, then adding a Repeatable Group block to that container, layout or stack. 

Most form blocks are compatible with repeatable groups. Editors are warned if they add a block which is not compatible.

The other aspect of a form containing a repeatable group of inputs is how the repeated data is handled and saved.

If data is only saved with no other processing, most form save handlers can store the repeated data because internally they use JSON serialization of the data. You don't need to do anything special because serialization of variable lists of data is built into the data format.

Where handling of data needs to be distinct to each replication of a group, we have the handlers Iterate Repeatable Group ... iterate Repeatable Group End to manage iteration through each copy of a repeatable group.

See Repeatable Groups of Inputs.

Listing inputs

Some inputs types are not single value. They can provide one or more values in a list. In its simplest form this could be the consequence of a Checkbox List input. Other listing inputs include File Upload, Screenshot and Webcam inputs through integration with the Snapshot addon and the Image Picker extension to Form Reform.

All of these inputs can provide a list of values and Form Reform provides a variety of mechanisms for working with lists of values.

By default a {{data_value}} for such an input name will concatenate the value into a comma separated list. This may be all you need to report the selection in a message or email. A specialized form handler Extend From List can be used to provide a little more control over how multiple values are concatenated.

When iterations are constrained to a small number, a simple way to handle them is to use a specific list of {{data_values}} with empty defaults. For example {{data_value.0|}} {{data_value.1|}} {{data_value.2|}} to display an input that could provide between 0 and 3 values.

For longer lists or more complex handling of multiple value inputs, we also have a specialized pair of handlers Iterate Data ... Iterate Data End to configure a section of the form handler pipeline to repeat across all items in a multi-value item of data.

File Upload and Image Selection inputs

Form Reform provides file upload and selection through integration with further addons.

File upload is through integration with Snapshot. This provides specialized form controls for Drag & Drop file Upload, Webcam file upload, and Screenshot file upload.

See File Upload, Webcam and Screenshot.

A related input is to pick one or more images using Form Reform Image Picker. This input block integrates with any gallery of images such as Omni Gallery to provide selection of one or more images.

Picked or uploaded files and images can then be attached or embedded in emails or linked from emails and form response messages.

See File Upload, Webcam and ScreenshotSending EmailForm Reform Image Picker.

Rating, Vote and Like inputs

The Rating, Up-Down Vote and Like input blocks are implemented as icon labels over hidden radioset and checkbox list input lists.

The icons default conveniently to stars, thumbs and hearts. The block edit dialogues enable icons, icon size and colours to be reconfigured.

With Up-Down Vote and Like the values default to -1 and +1 and can be configured as any numeric or string value. The Rating input has a configurable range defaulting to 1..5 which can be varied out to 0..20. To make ratings easy to use for comparisons and averages across any variation of setting, these are actually saved as decimal fractions between 0 and 1 to 3 decimal places.


The examples below are not part of a live form, they are front-end only. Icons sizes are adjusted to 2x.

Text Input Variants

In addition to the basic Text Input block, Form Reform provides a growing selection of specialized text input variants.

  • Text Confirm - a pair of text inputs which must match.
  • Uppercase - restrict and map input to all UPPERCASE text
  • Lowercase - restrict and map input to all lowercase text
  • Handle - restrict and map input to the handle_set of characters 
  • Numeric - restrict input to numeric digits 0..9 (not the same as a Number input which can accept floating point and decimals)
  • Masked Text - specify a format mask and constrain input to matching that mask.
  • Custom Text - a text input with configurable validation by regular expression and php validation method.

Masked Text

Masked Text uses a lightweight fixed size input mask (for use where the input requirements cannot be met by browser supported special to purpose input blocks for Email, URL, Telephone number, Password, Date and Time).

A mask is specified using Mask formatting characters:

  • 9 - A decimal digit
  • A - A letter
  • * - Any letter or decimal digit

Any other character becomes a fixed part of the mask, but it is generally not advisable to use other alphanumeric characters as part of this format.

 In our example below , we have 2 characters, 2 numbers, and one character or number. The mask is AA : 99 (*).

Custom Text

Custom Text provides highly configurable constraint and validation of a text input. Where none of the other text input variations meet your requirement, you should consider Custom Text before developing a new input block.

Either or both a regular expression and validation class can be specified. If neither are specified, the Custom Text input behaves like an ordinary Text input.

Regular Expression

An optional regular expression will be applied in the browser to restrict the entered text and after form submission to validate text on the server. The regular expression will be automatically wrapped in /^ ... $/ where necessary for evaluation. The regular expression must be valid for both JavaScript and PHP.

Validation class->method

Optional further validation after submission can be specified by providing the name of a validation class. The validation class should provide a method class_name->validate($text) which returns true/false.

For testing and as an example to follow when creating your own validation classes, the class JtF\FormReform\Examples\CustomValidate will fail any text containing the uppercase character X.

Select, Chekbox and Radio Input Variants

We have already mentioned the Combi variant of a Select, Checkbox List and Radioset inputs, where an 'other' option opens a text input.

Specific to the Select input, we also have a Grouped Select input, where options can be grouped together into option groups within the select dropdown.

The other variants we have for  Select, Checkbox List and Radioset inputs are attribute driven versions, where an input can be populated with options from an attribute. These variants are installed by Form Reform Attributes, Express and Users.

Learn with a simple form

While you may have plans to implement some much more complex forms using Form Reform, we strongly recommend you start with a simple form such as our contact form example in order to review the basic principles of using Form Reform before you move onto anything bigger.

  1. Start by submitting the form at Getting Started - Your First Form a few times, even making some deliberate mistakes.
  2. Watch our Getting Started with Form Reform video to see how the form is built.
  3. Read through the rest of Getting Started - Your First Form for more details of how this form is built.
  4. Create a test page on your site to build your own version of Getting Started - Your First Form and experiment.
  5. Develop your test page with some of the concepts introduced by our further examples and experiment with some of the other form inputs.

Additional Pages

Reform the way you add new input controls

If you need a specialized template or a custom input element, you can design new templates  or new block types for form elements as you would any block type.

Blocks are easy for third party addition or extension. Block templates and are the first thing any Concrete CMS developer learns to code. They are one of the easiest things to code. The underlying mechanisms are well established and reliable.

Reform what you can do with form data

Form handlers are built about the same extensible plugin system as many of my other addons (Universal Content Puller, Omni Gallery, Extreme Clean ...).

The whole system is aimed at easy extension within Form Reform, by third party addons, by agencies and by site building developers.

Handlers can be easily added to do whatever you want with the form data.

Reform where you can save form data

Saving form data with Form Reform is simply a handler in the processing pipeline. You can save to multiple locations or just one location.

If you need to save data elsewhere, such as to a dedicated table, a table provided through another addon, to another database, send it to an API, forward it to another server, or anywhere you can imagine, you can adapt or develop a form handler to do so.

The complexity of the code depends on where you are saving or sending the data, but wrapping that into a form handler plugin for Form Reform is straight forward.

The Form Reform handler plugin system is designed for easy extension.

Form Reform

Reform the way forms are built. Build a form out of blocks. Take control of how form submissions are processed and how the submitted data is stored. Easy to extend. Easy to reconfigure. Tangible data. Easy to add your own integrations.

Form Reform Display

List and display form submissions from Form Reform.

Form Reform UTM

Not just Form Reform and not just UTM! Capture and hold incoming UTM (or other) tags and make the tag values available to Form Reform and/or Conditional Redirect as {{place_holders}}. You don't need Form Reform to use this.

Form Reform Dynamics

Form handlers for querying Microsoft Dynamics, forwarding and updating form data to Microsoft Dynamics.


A suite of advanced image capture and upload tools. Enhanced drag and drop file uploading. Make screengrabs from within Concrete CMS. Capture images directly from device webcams. Edit images before uploading.

Form Reform Attributes, Express and Users

Save submitted forms to Express objects and user attributes. Add and remove users from groups.

Form Reform Image Picker

Form Reform Image Picker provides an image picking input block for Form Reform. The Image Picker Input is preconfigured to connect to most Omni Gallery gallery and slider display widgets, the core gallery block, and thumbnail showing templates for the core page list block. Advanced settings allow the Image Picker Input to be configured to pick images from other galleries and sliders.

Form Reform Data Picker

Form Reform Data Picker provides data picking input blocks for Form Reform. The Table Picker Input is preconfigured to connect to Universal Content Puller table display widgets. Advanced settings allow the Table Picker Input to be configured to pick data from other HTML tables.

Form Reform Developer

A growing suite of resources to assist those developing blocks, handlers and more complex forms for Form Reform.

Learn with a simple form

While you may have plans to implement some much more complex forms using Form Reform, we strongly recommend you start with a simple form such as our contact form example in order to review the basic principles of using Form Reform before you move onto anything bigger.

  1. Start by submitting the form at Getting Started - Your First Form a few times, even making some deliberate mistakes.
  2. Watch our Getting Started with Form Reform video to see how the form is built.
  3. Read through the rest of Getting Started - Your First Form for more details of how this form is built.
  4. Create a test page on your site to build your own version of Getting Started - Your First Form and experiment.
  5. Develop your test page with some of the concepts introduced by our further examples and experiment with some of the other form inputs.