silverstripe-framework/docs/en/02_Developer_Guides/03_Forms/03_Form_Templates.md
Michael Pritchard fdbd899766 DOC Update SilverStripe to Silverstripe CMS
- Remaining Developer Guides and Upgrading
- SilverStripe in a namespace or api has not been change
- To keep PRs easier no formatting was changed

Update merge conflics with two files

Update Silverstripe Ltd, Silverstripe Cloud and Silverstripe CMS

Silverstripe CMS Ltd > Silverstripe Ltd
Silverstripe CMS Platform > Silverstripe Cloud
Silverstripe CMS Framework > Silverstripe CMS

Resolve merge conflict

Remove Framework from Silverstripe CMS Framework

- 3 files

Change SilverStripe CMS to Silverstripe CMS
2021-07-30 13:54:15 +01:00

3.0 KiB

title summary icon
Form Templates Customize the generated HTML for a FormField or an entire Form. file-code

Form Templates

Most markup generated in Silverstripe CMS can be replaced by custom templates. Both Form and FormField instances can be rendered out using custom templates using setTemplate.

$form = new Form(..);
$form->setTemplate('MyCustomFormTemplate');

// or, just a field
$field = new TextField(..);
$field->setTemplate('MyCustomTextField');

To override the template for CMS forms, the custom templates should be located in /app/templates. Front-end form templates can be located in /app/templates or in the active theme's /templates directory.

[notice] It's recommended to copy the contents of the template you're going to replace and use that as a start. For instance, if you want to create a MyCustomFormTemplate copy the contents of Form.ss to a MyCustomFormTemplate.ss file and modify as you need.

The default Form.ss can be found in /vendor/silverstripe/framework/templates/SilverStripe/Forms/Includes/ [/notice]

By default, Form and Fields follow the Silverstripe CMS Template convention and are rendered into templates of the same class name (i.e EmailField will attempt to render into EmailField.ss and if that isn't found, TextField.ss or finally FormField.ss).

[alert] While you can override all templates using normal view inheritance (i.e defining a Form.ss) other modules may rely on the core template structure. It is recommended to use setTemplate and unique templates for specific forms. [/alert]

For FormField instances, there are several other templates that are used on top of the main setTemplate.

$field = new TextField();

$field->setTemplate('CustomTextField');
// Sets the template for the <input> tag. i.e '<input $AttributesHTML />'

$field->setFieldHolderTemplate('CustomTextField_Holder');
// Sets the template for the wrapper around the text field. i.e 
//    '<div class="text">'
//
// The actual FormField is rendered into the holder via the `$Field` 
// variable.
//
// setFieldHolder() is used in most `Form` instances and needs to output 
// labels, error messages and the like.

$field->setSmallFieldHolderTemplate('CustomTextField_Holder_Small');
// Sets the template for the wrapper around the text field.
//
// The difference here is the small field holder template is used when the 
// field is embedded within another field. For example, if the field is 
// part of a `FieldGroup` or `CompositeField` alongside other fields.

All templates are rendered within the scope of the FormField. To understand more about Scope within Templates as well as the available syntax, see the Templates documentation.

API Documentation