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.

Form Questions /

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

Images in TableListField

Go to End

4 Posts   1367 Views


Community Member, 545 Posts

21 January 2011 at 9:59am

I have a table list field in the front end linked to a dataobject with has_one relationships to images. Including the IMage relations calls the full image, but I'd like to use a resized image. I have a custom getter on the DataObject that works in MOdel admin but it won't work in the front end.


Community Member, 30 Posts

26 February 2011 at 4:08am

I have exactly the same problem. I want to generate a report (which uses TableListField) and inside the report I have some huge images I want to resize before showing.
I have tried playing around a little with casting and it hasn't worked so far. I'm not completely sure if this is because you can't accomplish this with casting or just because I haven't found the exact way to do it.

Another thing I have tried is subclassing TableListField and TableListField_Item. Inside the TableListField subclass I just change the itemClass and in TableListField_Item I overload the Fields method so I can check for every value if its an image object and then resize it. That's the theory at least (I haven't finished doing it). Anyone has a better idea?


Community Member, 30 Posts

1 March 2011 at 2:53am

I managed to do this. If someone is interested in a longer explanation just ask. If someone has a better solution please share!

You need to subclass TableListField and TableListField_Item. In TableListField you just set the $itemClass to your TableListField_Item class. In the TableListField_Item class you override the Fields() method and copy it exactly as in the original class.

Inside the foreach (of the Fields method) you add this:

if($fieldName === "Graphik"){
$graphik = $this->item->Graphik();
$value = $graphik->PaddedImage(100,70)->forTemplate();

"Graphik" is the name of the Image field.

And last but not least inside your Report class (that extends SS_Report) you override the getReportField() and copy it as in the original class. Then you change this line:

$tlf = new TableListField('ReportContent', $this->dataClass(), $columnTitles);

to use your extended TableListField class instead.


Forum Moderator, 53 Posts

18 October 2011 at 10:55am

If you extend the Image class (GraphikImage) and have a class (Test) with this relation has_one : Graphik => GraphikImage, all you need to do is create a fortemplate() method on GraphikImage e.g:

function fortemplate() {
    if ($Image = $this->Image()) return $Image->CroppedImage(40,40)->forTemplate();
    else return '(No Image)';

So, GraphikImage would have a relation has_one: Image => Image in this case. A bit roundabout, but just an alternative.