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.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

ImageDataObjectManager showing all photos on every page


Go to End


4 Posts   2147 Views

Avatar
socks

Community Member, 191 Posts

8 February 2010 at 4:44pm

I have an odd gallery implementation, so I've decided to use the ImageDataObjectManager.

I've added it to Page.php so I could have a separate gallery for each page. It seems to be working when I look at the CMS (it's only showing the images I've uploaded for that specific page). But when viewing the site, every page is outputting all photos that were added no matter what page they were uploaded to.

Thanks

GalleryPhoto.php

class GalleryPhoto extends DataObject {
	
	static $db = array (
		'Category' => 'Varchar',
		'PhotoCredit' => 'Varchar(200)'
	);

	static $has_one = array (
		'Attachment' => 'File',
		'Page' => 'Page'
	);

	public function getCMSFields_forPopup()
	{
		return new FieldSet(
			new TextField('Category'),
			new TextField('PhotoCredit'),
			new FileIFrameField('Attachment')
		);
	}

}

Page.php

static $has_many = array (
	'PhotoGallery' => 'GalleryPhoto'
);
...
function Lightbox() {		
	return DataObject::get('GalleryPhoto');
}

Page.ss

<% control Lightbox %>
	$Attachment
<% end_control %>

Avatar
MarcusDalgren

Community Member, 288 Posts

9 February 2010 at 1:45am

The problem is your Lightbox getter method.
Since you're doing return DataObject::get('GalleryPhoto'); without any where clause you will get all the gallery photos back.
If all you want is to get the Gallery photos related to the current page then you don't need to write your own method.

Just write this in your template instead.

<% control PhotoGallery %>
   $Attachment
<% end_control %>

Avatar
UncleCheese

Forum Moderator, 4102 Posts

9 February 2010 at 3:12am

If you're going to use a DOM to manage relationships on subclasses, you need to set its parent class. Think about it -- you're passing $this as the controller, so on the class PageSubclass, the DOM will try to set the PageSubclassID for that object, when in fact, it should be a PageID.

$myImageDOM->setParentClass("Page");

Avatar
socks

Community Member, 191 Posts

10 February 2010 at 7:54am

I first tried using the source name (PhotoGallery) instead of the source class, and that seemed to do the trick.

Thank you both!