From 8533d278f0f44a84b9540428bdc68dc12ee1cd34 Mon Sep 17 00:00:00 2001 From: Mojmir Fendek Date: Tue, 20 Jun 2023 14:33:11 +1200 Subject: [PATCH] BUG: Allow CMS fields customisations via extension to be executed after the default setup. --- src/Models/EmailLink.php | 8 +++---- src/Models/Link.php | 33 +++++++++++++++-------------- src/Models/SiteTreeLink.php | 42 +++++++++++++++++++++---------------- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/Models/EmailLink.php b/src/Models/EmailLink.php index de01aaa1..3e9aadea 100644 --- a/src/Models/EmailLink.php +++ b/src/Models/EmailLink.php @@ -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() diff --git a/src/Models/Link.php b/src/Models/Link.php index 84a7dc17..cc58cea4 100644 --- a/src/Models/Link.php +++ b/src/Models/Link.php @@ -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(); } /** diff --git a/src/Models/SiteTreeLink.php b/src/Models/SiteTreeLink.php index acbcbe40..a6c374b4 100644 --- a/src/Models/SiteTreeLink.php +++ b/src/Models/SiteTreeLink.php @@ -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