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

Thumbnails for HasManydataobjectmanager & ManyManydataobjectmanager - can't use $summary_fields?


Go to End


1144 Views

Avatar
JonoM

Community Member, 130 Posts

3 April 2011 at 4:12pm

I had a situation where I wanted to produce a thumbnail image for a dataobject in a many-many relation in both a data object manager and a complex table field automatically, using $summary_fields.

I followed two different techniques outlined here http://www.ssbits.com/snippets/2009/adding-a-thumbnail-to-a-dataobjectmanager-or-complex-table-field/ and here http://www.silverstripe.org/general-questions/show/6247 but couldn't quite get things to work.

In then end I determined (I think) that if you try to build a HasManydataobjectmanager or ManyManydataobjectmanager using shorthand, and you have calls to methods in $summary_fields such as 'Logo.CMSThumbnail.Tag' it will break the manager and return an error. I think this is a bug but I wouldn't have a clue how to fix it - but if you're reading this Uncle Cheese maybe you can look in to it?

I got around it by combining the two techniques - referencing an image function in $summary_fields for use in complex table fields or straightforward DataObjectManagers, and defining a separate function for HasManydataobjectmanagers and ManyManydataobjectmanagers, then building those the long way rather than using shorthand and relying on $summary_fields.

For anyone who had the same problem as me here's what I did:

On the data object class:

	static $has_one = array (
		'Logo' => 'Image'
	);

	static $summary_fields = array(
        'Logo.CMSThumbnail.Tag' => 'Thumbnail',
        'Title' => 'Title'
    );

    //Generate a thumbnail for the DOM
    public function getThumb()
    {
        if($this->LogoID)
            return $this->Logo()->CMSThumbnail();
        else   
            return '(No Image)';
    }

Example - On a related class such as a page with ManyManyDataObjectManager - overwrite $summary_fields

	function getCMSFields() {
		$fields = parent::getCMSFields();
		
		//Set up DOM
		$manager = new ManyManyDataObjectManager(
			$this,
			'MyObjects',
			'MyObject',
			array(
				'Thumb' => 'Logo','Title' => 'Title' //Override $summary_fields
			),
			'getCMSFields_forPopup'
		);
		$fields->addFieldToTab("Root.Content.Exhibitors", $manager);

or on a normal DataObjectManager - use the $summary_fields

	function getCMSFields() {
		$fields = parent::getCMSFields();
		
		//Set up DOM
		$manager = new DataObjectManager(
			$this,
			'MyObjects',
			'MyObject'
		);
		$fields->addFieldToTab("Root.Content.Exhibitors", $manager);