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're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

many Attachments on FileDataObjectManager

Go to End

24 Posts   4967 Views


Community Member, 17 Posts

4 February 2011 at 7:39am


That's exactly that i need!


thanks so much UncleCheese


Community Member, 72 Posts

12 February 2011 at 6:44am

I'm building a historic timeline of sorts using a nested DataObjectManager, and my structure is currently like this:

HistoryPage extends Page has_many HistoryDate
HistoryDate extends DataObject has_many HistoryDateItem
HistoryDateItem extends DataObject

HistoryDateItems can consist of a Picture, Quote, Story, or Stats.
HistoryDateItems will NEVER be more than 8 items.

everything is pretty much working but when I open the window for the nested DOM its only 433px wide. Is there a way to set the width of a nested DOM object?
I've tried using $nestedDOM->setPopupWidth('600'); but no workie.

Also, just looking for some friendly advice on this, but for my HistoryDateItem, is a DataObject the best route to take for this?
The Timeline looks like this -
when the items underneath the date are clicked they open a "lightbox" type window with the Picture, quote or whatever inside said window.



Community Member, 18 Posts

4 March 2011 at 4:49am

Hi Unclecheese, thank you for all your hard work on the DataObjectManager.

I have a need to attach multiple files to Silverstripe pages and keep bouncing my head against the wall trying to get this to work correctly.

I started with the code you posted in this thread on 2 February 2011 at 4:04am, where you listed three files: ResourcePage.php, Resource.php, and ResourceFile.php. Originally, I was getting errors with the $manager-> modifiers until I changed the line $manager = new DataObjectManager(...) to $manager = new FileDataObjectManager(...).

I understand that I need to insert another parameter into the construct after the source class for a "File name on DataObject" but I can't seem to figure out just what to use there. It seems no matter what I try the CMS keeps dying with the error "FileDataObjectManager::__construct():Could not determine file relationship". Using your example code as a start could you shed light on what I need to use there?

Also, utilizing this example will I be able to attach the same multiple files to multiple pages. (ie File1 & File2 attached to both Page1 and Page2)?



Forum Moderator, 4102 Posts

4 March 2011 at 4:58am

Whatever the file relationship you have on your DataObject, put that as the fourth argument. So if your DataObject has a $has_one 'MyFile' => 'File', then use 'MyFile'.


Community Member, 18 Posts

4 March 2011 at 5:18am

Thanks for the fast response!

Sorry for my inexperience in this, but I'm new to Silverstripe and still a little unsure what to use. Following the code from the example, I have three files with the following setup:

File: ResourcePage.php

class ResourcePage extends Page
static $has_many = array (
'Resources' => 'Resource'

public function getCMSFields()
$f = parent::getCMSFields();
$manager = new FileDataObjectManager(
$this, // Controller
'Resources', // Source name
'Resource', // Source class
'?', // File name on DataObject
'Name' => 'Name',
'Description' => 'Description',
'Category' => 'Category',
'Attachment.Name' => 'Attachment',
), // Headings
'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
// Filter clause
// Sort clause
// Join clause

File: Resource.php

class Resource extends DataObject
static $db = array (
'Name' => 'Text',
'Description' => 'Text',
'Category' => "Enum('Industry, Finance, Education')",

static $has_one = array (
'ResourcePage' => 'ResourcePage'

static $has_many = array (
'Attachments' => 'ResourceFile'

File: ResourceFile.php

class ResourceFile extends File
static $has_one = array (
'Resource' => 'Resource'

Which label would I use as the fourth argument?


Forum Moderator, 4102 Posts

4 March 2011 at 7:15am

This doesn't work:

static $has_many = array (
'Attachments' => 'ResourceFile'

FileDOM is for DataObjects with a has_one file.

You can use a regular DOM to manage those Resources and just use a MultipleFileUploadField for the Attachments field. You'll have to either decorate the File class or create a file subclass to put a has_one Resource on the File.


Community Member, 18 Posts

4 March 2011 at 7:30am

Thank you UncleCheese! I will give that a whirl! :)


Community Member, 78 Posts

6 June 2011 at 1:18pm

Good morning UncleCheese,

Is it possible way to have category from other table.

Thanks in advance for your reply.


Go to Top