fullscreeninteractive/silverstripe-manyfield

SilverStripe FormField for adding dynamic data to forms.

1.0.2 2022-03-24 21:52 UTC

This package is auto-updated.

Last update: 2024-04-24 18:46:27 UTC


README

Version License

A reusable approach to a form field which allows you to create and delete rows in either custom built forms or in Userforms.

This is designed to work on the front-end with limited javascript (i.e it does not require GridField or entwine).

Each row can relate to a DataObject subclass or simply to be used to capture the data as an array.

Installation

composer require fullscreeninteractive/silverstripe-manyfield

Usage

Image of Function

use FullscreenInteractive\ManyField\ManyField;

$fields = new FieldList(
    $many = ManyField::create('SwabList', [
        TextField::create('Swab'),
        TextField::create('TestSite'),
        TextField::create('Description'),
        TextField::create('Material')
    ])
);

Data will either be saved as setSwabList($data), SwabList database field or in the SwabList relation. If you are saving into a relation such as HasMany or ManyMany list then make sure you include a hidden field in your field list.

    $many = ManyField::create('SwabList', [
        HiddenField::create('ID', ''),
        TextField::create('Swab'),
        TextField::create('TestSite'),
        TextField::create('Description'),
        TextField::create('Material')
    ]);

Sorting

Include a Hidden field Sort and make sure sorting is enabled.

    $many = ManyField::create('SwabList', [
        HiddenField::create('ID', ''),
        HiddenField::create('Sort', ''),
        TextField::create('TestSite')
    ])->setCanSort(true);

Required Fields

$many = ManyField::create('SwabList', [
    TextField::create('TestSite')->setRequired(true)
])->setCanSort(true);

Javascript Events

If you have UI handlers that need to run when fields are added or removed (such as Date Pickers) create a handler on your <body> element and listen for either:

  • manyFieldAdded
  • manyFieldRemoved

FAQ

When I use this with File fields I don't get files uploaded?

Make sure your form encoding is set to the correct MIME type.

$form->setEncType(Form::ENC_TYPE_MULTIPART);

Licence

BSD 3-Clause License