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