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

[solved] Multiple files on a dataobjekt (Model Admin)

Go to End

2 Posts   978 Views


Community Member, 56 Posts

9 February 2012 at 9:21am

Edited: 09/02/2012 10:09am

Hello everybody.

i'm german and i hope i can explain my problem in a understandable way. i've got a bunch of pdfs and docs (organized by kickassets) that i wanna conncect to a dataobject called 'Projekt' . Some of the files are unique to the projects (=Projekt). Some files belong to almost all projects. Examples for the files could be ‘description-project1.pdf‘ or ‘project-application-form.doc‘. I've tried a solution according to this code

At first i thought i need a description for the file so i set a descritption. But i realized any file got a name. Maybe i can use this name instead the descrition for a better explanation of the downloadable file (user centric view).

Here is my code:

class ResourceFile extends File {

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


class Resource extends DataObject
static $db = array (
'Name' => 'Text',
'Description' => 'Text'

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

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

public function getCMSFields_forPopup()
return new FieldSet(
	new TextField('Name'),
	new TextareaField('Description'),
	new MultipleFileUploadField('Attachments')

Maybe the description is obsolet. Is the has_one relation right? because one file can be attached to many projects so i guess i have to use has_many. but there i a strange error.

At least the Projekt-Dataobject



class Projekt extends DataObject
	static $db = array(
		'Title' => 'Varchar(255)',
		'Description' => 'HTMLText',
		'Long' => 'Int',
		'Lat' => 'Int',
		'URLSegment' => 'Varchar(255)',
		'ProjectCat' => "Enum('Soziales, Strasse, Wirtschaft')",
		'ProjectStatus' => "Enum('Planung, Durchfuehrung, Abgeschlossen')",
		'StatusText' => 'Varchar(255)',
		'MetaTitle' => 'Varchar(255)'

	//Set our defaults
	static $defaults = array(	
		'Title' => 'Neues Projekt',
		'URLSegment' => 'neues-projekt'
	static $has_one = array(
		'Image' => 'Image',
		'LinkedPage' => 'SiteTree'
	static $has_many = array (
	'Resources' => 'Resource'
	//Relate to the category pages
	static $belongs_many_many = array(
		'Categories' => 'CategoryPage'
	//Fields to show in ModelAdmin table
	static $summary_fields = array(
		'Title' => 'Title',
		'URLSegment' => 'URLSegment',
		'ProjectStatus' => 'ProjectStatus',
		'ProjectCat' => 'ProjectCat',

	//Add an SQL index for the URLSegment
	static $indexes = array(
		"URLSegment" => true

	//Fields to search in ModelAdmin
	static $searchable_fields = array (
		'Categories.ID' => array(
			'title' => 'Category'

	function getCMSFields() 
		$fields = parent::getCMSFields();

		//Main Tab
		$fields->addFieldToTab("Root.Main", new TextField('Title', 'Titel/Name des Projektes'));	
		$fields->addFieldToTab("Root.Main", new TextField('MetaTitle', 'Untertitle zum Projekt'));	

		$manager = new DataObjectManager(
		$this, // Controller
		'Resources', // Source name
		'Resource', // Source class
		'Name' => 'Name',
		'Description' => 'Description',
		'Attachment.Name' => 'Attachment',
		), // Headings
		'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
		// Filter clause
		// Sort clause
		// Join clause

		// If undefined, all types are allowed. Pass with or without a leading "."
		// Label for the upload button in the popup
		//$manager->setBrowseButtonText("Upload (PDF or DOC only)");
		// In grid view, what field will appear underneath the icon. If left out, it defaults to the file title.
		// Plural form of the objects being managed. Used on the "Add" button.
		// If left out, this defaults to [MyObjectName]s
		$fields->addFieldToTab("Root.Dateien", $manager); 
		//$fields->addFieldToTab("Root.Dateien", new TextField('DownloadItem', 'Download-Datei'));
		return $fields;

	//some functions

The resource tab on a project in modelladmin is shown. The popup is working and saving a file works well. But the saved ressource is not shown in the modelladminlisting.

EDIT: In the popup the upload functionality works. i can import an existing file and i see (so far) this file in the attached files block. When I save his popup a green message appears ('Added new Resource successfully') but the file in the attached files block disappears.

Plus: If i comment out the setAllowedFileTypes or the setBrowseButtonText there is an error.?
Whats wrong with that code? Is this the wrong way to attach multiple files?

Thanks for your help.


Community Member, 56 Posts

14 February 2012 at 2:58am

Hello again.

I kept searching and found this useful snippet at the docs:

This solved the problem and the objective (attaching files on dataobjects) is achieved.