2.7 KiB
TableField
Introduction
TableField behaves in the same manner as [api:TableListField]
, however allows the editing of existing and adding of
new rows.
The data is saved back by the surrounding form-saving (mostly EditForm->save).
See [api:TableListField]
for more documentation on the base-class
Usage
Add hidden default data
Please use TableField->setExtraData() to specify additional (non-editable) data. You might use the following code that shows the Player of Team with a particular Team ID and automatically saves new Players into this Team.
In this example, you'll note that we're setting TeamID to $this->ID. This works well if you're including a TableField as an editable field on a getCMSFields() call.
:::php
$myTableField = new TableField(
'MyTableField', // fieldName
'Player', // sourceType
array(
'FirstName'=>'First Name',
'Surname'=>'Surname'
), // fieldList
array(
'FirstName'=>'TextField',
'Surname'=>'TextField'
), // fieldTypes
null, // filterField (legacy)
"Player.TeamID",
$this->ID
);
// add some HiddenFields thats saved with each new row
$myTableField->setExtraData(array(
'TeamID' => $this->ID ? $this->ID : '$RecordID'
));
The '$RecordID' value is used when building forms that create new records. It will be populated with whatever record id is created.
Row Transformation
You can apply a [api:FormTransformation]
to any given field,
based on a eval()ed php-rule. You can access all columns on the generated DataObjects here.
:::php
$myTF->setTransformationConditions(array(
"PlayerName" => array(
"rule" => '$PlayerStatus == "Retired" || $PlayerStatus == "Injured"',
"transformation" => "performReadonlyTransformation"
)
));
Required Fields
Due to the nested nature of this fields dataset, you can't set any required columns as usual with the
[api:RequiredFields]
** on the TableField-instance for this.
Note: You still have to attach some form of [api:Validator]
to the form to trigger any validation on this field.
Nested Table Fields
When you have TableField inside a [api:ComplexTableField]
, the parent ID may not be known in your
getCMSFields() method. In these cases, you can set a value to '$RecordID' in your TableField extra data, and this will
be populated with the newly created record id upon save.
Known Issues
- A TableField doesn't reload any submitted form-data if the saving is interrupted by a failed validation. After refreshing the form with the validation-errors, the TableField will be blank again.
- You can't add visible default data to columns in a TableField, please use setExtraData
API Documentation
[api:TableField]