Editable table with multiple tables per page with only one relation
<?php
class TableRow extends DataObject {
protected static $db = [
'Column1' => 'Varchar(255)',
'Column2' => 'Varchar(255)',
'Column3' => 'Varchar(255)',
'Table' => 'Int',
'SortOrder' => 'Int'
];
protected static $has_one = [
'Page' => 'Page'
];
private static $summary_fields = [
'Column1' => 'Column One',
'Column2' => 'Column Two',
'Column3' => 'Column Three',
];
protected static $default_sort = 'SortOrder';
public function getCMSFields() {
$fields = new FieldList([
TextField::create('Column1'),
TextField::create('Column2'),
TextField::create('Column3'),
]);
return $fields;
}
public function canView($member = null) {
return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
}
public function canEdit($member = null) {
return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
}
public function canDelete($member = null) {
return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
}
public function canCreate($member = null) {
return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
}
}
<?php
class EditableTablePage extends Page {
private static $has_many = [
'TableRows' => 'TableRow'
];
public function getCMSFields(){
$fields = parent::getCMSFields();
Requirements::customCSS(".col-Table { display: none; }");
foreach ([1 => 'One', 2 => 'Two'] as $number => $name) {
$displayFields = [
'Column1' => 'Column One',
'Column2' => 'Column Two',
'Column3' => 'Column Three',
'Table' => function () use ($number) { return new HiddenField('Table', null, $number); }
];
/** @var GridFieldConfig $tableConfig */
$tableConfig = GridFieldConfig::create();
$tableConfig->addComponent(new GridFieldButtonRow('before'))
->addComponent(new GridFieldAddNewInlineButton('buttons-before-left'))
->addComponent(new GridFieldSortableHeader())
->addComponent(new GridFieldOrderableRows('SortOrder'))
->addComponent((new GridFieldEditableColumns())->setDisplayFields($displayFields))
->addComponent(new GridFieldDeleteAction());
$gridField = GridField::create(
"FeesTable{$name}GridField",
"Table Rows",
$this->{"Table{$name}TableRows"}(),
$tableConfig
);
$fields->addFieldToTab("Root.Table{$name}", $gridField);
}
return $fields;
}
}