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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Customising the CMS /

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Auto-update image upload directory


Go to End


3 Posts   1418 Views

Avatar
alexanderhiam

Community Member, 2 Posts

3 December 2012 at 7:31am

Hi all,

I've hit a bit of a snag which I'm sure has a simple solution, but I can't for the life of me figure it out. I have a page with an image upload field, and I need the upload directory to be /[parent page->URLSegment]/[URLSegment]/. At the moment I'm doing this with UploadField->setFolderName() in getCMSFields(), but this of course only changes the upload directory when the page is saved. Ideally I want it to change as soon as the URLSegment changes, just like the URLSegment does when the Title is changed.

-Alex

Avatar
juergr

Community Member, 17 Posts

4 December 2012 at 11:36am

You should be able to do this in the 'onBeforeWrite()' functions of the different pages.

Have a look at this code:

	public function onBeforeWrite() {
		parent::onBeforeWrite();

		if($this->isChanged('Title')) {
			$this->URLSegment = $this->createUniqueURLSegement();
		}

		if($this->isChanged('URLSegment')) {
			$fields = $this->getChangedFields();
			$URLSegment = $fields['URLSegment'];
			$pdfFolder = Folder::find(self::$pdf_folder . '/' . $URLSegment['before']);
			if($pdfFolder) {
				$pdfFolder->setName($URLSegment['after']);
				$pdfFolder->write();
			}
			$imageFolder = Folder::find(self::$image_folder . '/' . $URLSegment['before']);
			if($imageFolder) {
				$imageFolder->setName($URLSegment['after']);
				$imageFolder->write();
			}
		}
	}

Here I do exactly what you want and it seems to work. Basicaly i have several AnnualProgramms with several events. So every time the title of an annualprogramm changes i change the URLSegment and remane all folders which are affected by the renaming.

Avatar
alexanderhiam

Community Member, 2 Posts

14 December 2012 at 6:35pm

Finally got a chance to try this out and it works perfectly, thanks!