5102 Posts in 1520 Topics by 1116 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 316 Views |
-
managing has_many 'File' relation in ModelAdmin

29 October 2012 at 7:10am
Hi,
I have a has_many 'File' relation set on my Model. When i want to edit this relation with AdminModel I can link existing or add new File (in my case Datoteka). But clicking the add new File doesn't show me the uploadFile field but rather the form for already uploaded files which is empty (doh, no file to edit).
What do i have to do to get the upload field when I want to add a new File to my database. I'm posting the image of the form which opens (but i want the uploadfile field there instead).
Sorry about the language on the picture. -
Re: managing has_many 'File' relation in ModelAdmin

1 November 2012 at 9:22pm
Hi zrelieskim,
You need to use a field that can handle multiple file relations, like Uploadify could in 2.4 (not sure if there are plans to update it to 3.0).
The other option you have is to create a has_many to a custom DataObject which has_one file. Not ideal, but does have the advantage of allowing you to add custom metadata to them as you upload.
Aram
www.SSBits.com - SilverStripe Tutorials, tips and other bits.
-
Re: managing has_many 'File' relation in ModelAdmin

1 November 2012 at 10:03pm Last edited: 1 November 2012 10:05pm
Thanks for your reply Aram.
I've made some progress, but I'm stuck again. First, I realised that has_many relation only works if the other Object has 'has_one' defined, so I changed the relation to many_many.
Then I decided not to subclass 'File' DataObject but instead create a DataExtension. With It's method updateCMSFields I can control which fields are displayed in the create new 'File' Form.
Then I tried adding the new UploadField to this Form (via the updateCMSFields), but here comes the problem. UploadField requires a relation to the parent Object which i have no idea how to get from the DataExtension class.
class GradivoFile extends DataExtension {
public static $db = array();public function updateCMSFields(FieldList $fields) {
$fields->addFieldToTab("Root.Main",
new UploadField("Datoteka", "Datoteka", $this->owner)
);}
}
And in my_config.php i have:Object::add_extension('File', 'GradivoFile');
The problem with the code is that $this->owner returns a 'File' object instead the Object with many_many defined (in my case Gradivo, which means Material in Slovene). So when i try uploading file with the form there is an error.
I've tried to overcome this problem but i can't seem to understand how to get the data from silverstripe controllers. The only way i can think of is from the URL but this sounds a bit to lame, so I didn't even try it:
URL: .../admin/gradiva/Gradivo/EditForm/field/Gradivo/item/1/ItemEditForm/field/Datoteka/item/new -
Re: managing has_many 'File' relation in ModelAdmin

1 November 2012 at 10:13pm
When using Data Extension you can add relationships in the same way you would on a normal class: http://doc.silverstripe.org/framework/en/reference/dataextension
However I would suggest extending it and adding a has_one to the extended class to keep things contained rather than applying to every file. There is an exampel of this on the Uploadify docs under 'Multiple Files' header: http://ss2doc-v2.ernie.silverstripe.com/old/uploadify
Aram
www.SSBits.com - SilverStripe Tutorials, tips and other bits.
| 316 Views | ||
|
Page:
1
|
Go to Top |


