Skip to content

Commit

Permalink
BUG: Allow CMS fields customisations via extension to be executed aft…
Browse files Browse the repository at this point in the history
…er the default setup.
  • Loading branch information
mfendeksilverstripe committed Jun 20, 2023
1 parent 3478f28 commit 8533d27
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 38 deletions.
8 changes: 4 additions & 4 deletions src/Models/EmailLink.php
Expand Up @@ -25,11 +25,11 @@ public function generateLinkDescription(array $data): string

public function getCMSFields(): FieldList
{
$fields = parent::getCMSFields();
$this->beforeUpdateCMSFields(static function (FieldList $fields) {
$fields->replaceField('Email', EmailField::create('Email'));
});

$fields->replaceField('Email', EmailField::create('Email'));

return $fields;
return parent::getCMSFields();
}

public function getURL()
Expand Down
33 changes: 17 additions & 16 deletions src/Models/Link.php
Expand Up @@ -80,23 +80,24 @@ public function scaffoldLinkFields(array $data): FieldList
*/
public function getCMSFields(): FieldList
{
$fields = parent::getCMSFields();
$linkTypes = $this->getLinkTypes();

if (static::class === self::class) {
// Add a link type selection field for generic links
$fields->addFieldsToTab(
'Root.Main',
[
$linkTypeField = DropdownField::create('LinkType', 'Link Type', $linkTypes),
],
'Title'
);

$linkTypeField->setEmptyString('-- select type --');
}
$this->beforeUpdateCMSFields(function (FieldList $fields) {
$linkTypes = $this->getLinkTypes();

if (static::class === self::class) {
// Add a link type selection field for generic links
$fields->addFieldsToTab(
'Root.Main',
[
$linkTypeField = DropdownField::create('LinkType', 'Link Type', $linkTypes),
],
'Title'
);

$linkTypeField->setEmptyString('-- select type --');
}
});

return $fields;
return parent::getCMSFields();
}

/**
Expand Down
42 changes: 24 additions & 18 deletions src/Models/SiteTreeLink.php
Expand Up @@ -40,25 +40,31 @@ public function generateLinkDescription(array $data): string

public function getCMSFields(): FieldList
{
$fields = parent::getCMSFields();

$fields->insertAfter(
'Title',
TreeDropdownField::create(
$this->beforeUpdateCMSFields(static function (FieldList $fields) {
// Remove scaffolded fields to we don't have field name conflicts which would prevent field customisation
$fields->removeByName([
'PageID',
'Anchor',
]);

$fields->insertAfter(
'Title',
TreeDropdownField::create(
'PageID',
'Page',
SiteTree::class,
'ID',
'TreeTitle'
)
);

$fields->insertAfter(
'PageID',
'Page',
SiteTree::class,
'ID',
'TreeTitle'
)
);

$fields->insertAfter(
'PageID',
AnchorSelectorField::create('Anchor')
);

return $fields;
AnchorSelectorField::create('Anchor')
);
});

return parent::getCMSFields();
}

public function getURL(): ?string
Expand Down

0 comments on commit 8533d27

Please sign in to comment.