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

Manage Product Specifications

Go to End

3 Posts   1477 Views


Community Member, 4 Posts

3 June 2010 at 4:04am

I'm working on a site for a client where they would like to manage a list of their product lines, as well as the individual products (floorplans) inside each line. Each floorplan has a similar (though can vary) list of specifications and associated values.

I'd like to be able to set up a list of specs for a certain product line, and on each floorplan (if possible), allow for selection of whichever specs may apply and then input the values specific to that floorplan. I'm assuming the DataObjectManager is the right tool for this, and while I have a decent grasp on relationship models, I have no clue how I might accomplish this task. If anyone is able to point me in the right direction, or provide some sort of tutorial (with explanations - I prefer to know what I'm doing and why, rather than just blindly following instructions), I would greatly appreciate it.

I could easily accomplish this stuff if I were building the site from scratch, but I need to be sure the client is able to maintain their product list within the CMS rather than having to come to me for changes.


Forum Moderator, 4102 Posts

3 June 2010 at 3:35pm

Well, I would start here:

The way I would set it up is, on the ProductLine object, have a $has_many "Specifications" managed with a DOM, and then, depending on what you want to do with your FloorPlan object, if it's a Page, then you can select the specs using a CheckboxSetField.

You could eliminate a step, however, depending on what kind of experience you want for your users.. You could set up a many_many relation of FloorPlan to Specification, and manage that with a ManyManyDataObjectManager. That way, you can create/edit/delete Specifications in the same place you assign them to a FloorPlan.

The code for that would look like this, give or take a few syntax errors..


class Specification extends DataObject
static $db = array ('Title' => 'Varchar');
static $belongs_many_many = array ('FloorPlans' => 'FloorPlan');

static $summary_fields = array('Title' => 'Title');

public function getCMSFields() {
return new FieldSet(new TextField('Title'));
class FloorPlan extends Page
static $many_many = array ('Specifications' => 'Specification');
public function getCMSFields() {
$f = parent::getCMSFields();
$f->addFieldToTab("Root.Content.Specs", new ManyManyDataObjectManager($this,'Specifications','Specification'));
return $f;


Community Member, 4 Posts

4 June 2010 at 1:03am

Thanks for that. I will give that code a try later today and see where I can take it.