Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Customising the CMS

How to run a function after certain CMS fields have been changed


Reply

4 Posts   715 Views

Avatar
Tama

3 October 2011 at 3:22pm (Last edited: 3 October 2011 3:24pm), Community Member, 130 Posts

I've got a function I want to run on page save/ publish if certain custom CMS fields have been changed.

For example:

class Foo extends DataObjectDecorator {
public function updateCMSFields() {
$fields->addFieldsToTab("Root.Content", array(
new NumericField('Bar', 'Change me and save this page to trigger FooBar function')
));
}
}

function FooBar(){
//Do things
//With stuff
}

Any ideas?

Avatar
swaiba

3 October 2011 at 9:47pm Forum Moderator, 1796 Posts

create some custom javascript to handle the change (inspect the current form to get the required ID to watch), add a REquirements::javascript within the function - job done.

Avatar
Tama

4 October 2011 at 8:40am Community Member, 130 Posts

Hi Swaiba

Thank you for that.

I understand the principle of what you're saying but struggling with the correct execution.

Do you have any code examples of how to do this?

Cheers
Tama

Avatar
martimiz

6 October 2011 at 8:07am (Last edited: 6 October 2011 8:07am), Forum Moderator, 1091 Posts

Looking at the SiteTree::onBeforeWrite() function I noticed the use of $this->isChanged('URLSegment') (line 1339). So maybe this would work in your Page class:

protected function onBeforeWrite() {

   if ($this->isChanged('SomeField')){
      // do something
   }

   parent::onBeforeWrite();
}

Mind - I didn't test it...