This document contains information for an outdated version (2.3) and may not be maintained any more.
If some of your projects still use this version, consider upgrading as soon as possible.
TableField behaves in the same manner as 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 TableListField for more documentation on the base-class
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.
$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.
You can apply a FormTransformation to any given field, based on a eval()ed php-rule. You can access all columns on the generated DataObjects here.
$myTF->setTransformationConditions(array( "PlayerName" => array( "rule" => '$PlayerStatus == "Retired" || $PlayerStatus == "Injured"', "transformation" => "performReadonlyTransformation" ) ));
Due to the nested nature of this fields dataset, you can't set any required columns as usual with the RequiredFields** on the TableField-instance for this. Note: You still have to attach some form of Validator to the form to trigger any validation on this field.
Nested Table Fields
When you have TableField inside a 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.
- 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