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:

Template Questions /

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

Extending Image


Go to End


3 Posts   2084 Views

Avatar
CodeGuerrilla

Community Member, 105 Posts

31 March 2011 at 1:23am

Edited: 31/03/2011 8:37pm

I am trying to extend Image so when I return it to the template it has a certain compression ratio (don't ask):

CustomImage.php

class CustomImage extends Image
{
   function generateOptimised($gd) {
       $gd->setQuality(70);
       return $gd->resizeByWidth(941);
    }
}

And in my template:

<% control CustomImage %>
   $Optimised
<% end_control %>

OR:

$CustomImage.Optimised

Doesn't do anything.

$CustomImage.Optimised.URL

returns 'http://' what am I doing wrong? have used custom images before

Avatar
(deleted)

Community Member, 473 Posts

31 March 2011 at 8:12am

My usual approach to extending Image is to use a DataObjectDecorator, just so the added methods are available on all Images. Though that may also require something like:

function Optimised() {
return $this->owner->getFormattedImage('Optimised');
}

In your case, I would assume that the Image you're trying to use is a CustomImage, but just an ordinary Image.

Avatar
CodeGuerrilla

Community Member, 105 Posts

31 March 2011 at 8:29pm

Thanks simon_w works well and as you mentioned works on all images objects that is cool so now I can just make a bunch of different function in CustomImage and call them in my templates brilliant.

CustomImage.php

class CustomImage extends DataObjectDecorator
{
	function Optimised($width, $height)
	{
		return $this->owner->getFormattedImage('Optimised', $width, $height); 
	}
	
	function generateOptimised(GD $gd, $width, $height) {
      $gd->setQuality(70);
      return $gd->croppedResize($width, $height);
   }
}

_config.php

Object::add_extension('Image', 'CustomImage');

Template

 $Image.Optimised(150,150)