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.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Add CMSThumbnail in SS3.0.1 !


Reply

5 Posts   977 Views

Avatar
DesignerX.com.au

1 August 2012 at 7:16pm Community Member, 107 Posts

Hi all, i am trying to make a basic gallery & add the CMSThumbnail but its not working for me.. here is the coe below :

SGalleryImage.php
<?php

class SGalleryImage extends DataObject {
/*
public static $plural_name = 'Gallery Images';
public static $singular_name = 'Gallery Image';
*/

static $db = array(
'Name' => 'Varchar(255)',
'Caption' => 'Text',
'SortID' => 'Int'
);
static $has_one = array(
'Image' => 'Image',
'SGallery' => 'SGallery'
);
// Summary fields
public static $summary_fields = array(
'Name' => 'Name',
'Caption' => 'Caption',
//"Image => 'Image',
);

function SummaryOfImage() {
if ($Image = $this->Image())
return $Image->CMSThumbnail();
else
return '(No Image)';
}

}

SGallery.PHP
<?php

Class SGallery extends Page {

static $singular_name = 'SGallery';
static $plural_name = 'SGalleries';
static $icon = '';
static $db = array(
'GalleryDesc' => "Text"
);
static $has_one = array(
'Folder' => 'Folder',
'CoverImage' => 'Image'
);
public static $has_many = array(
'Images' => 'SGalleryimage'
);

//*
function getCMSFields() {
$fields = parent::getCMSFields();
/*
* Add extra basic fields to the CMS + Extra Tab
* $newFieldsArray = list of fields need to be added to tab
* $newFieldsArray MUST be used to add array of fields as fields need to be declared before they can be added to a tab !
*/

$newFieldsArray = array(
new UploadField("CoverImage"),
new TextareaField("GalleryDesc")
);
$fields->addFieldsToTab("Root.Settings", $newFieldsArray, "");

/*
* Add Gallery Section to the page using has_many relation + GridFeild
*/

$config = GridFieldConfig_RelationEditor::create();
$config->addComponents(
new GridFieldSortableRows($this->Images->SortID)
);
/*
*

$config->setDisplayFields(array(
'ID' => 'ID',
'Title' => 'Title'
));

*
*/
$field = new GridField("SGalleryimages", "SGallery images", $this->Images(), $config);
$fields->addFieldToTab("Root.GalleryImages", $field);

return $fields;
}

/*
* Attempt to create custom folder for each SGallerypage
function findOrMakeFolder() {
$Title = SiteTree::generateURLSegment($this->Title);
if ($this->Folder() && $this->Folder()->exists()) {
$folder = $this->Folder();
} else {
$folder = Folder::findOrMake($Title);
$folder->write();
}
$folder->Name =$Title;
$folder->Title = $Title;
$this->FolderID = $folder->ID;
$folder->write();
}
*
*/

function onBeforeWrite() {
parent::onBeforeWrite();
//$this->findOrMakeFolder();
}

function onBeforeDelete() {
parent::onBeforeDelete();
}

function ClassName() {
return __CLASS__;
}

}

class SGallery_Controller extends Page_Controller {

function init() {
parent::init();
}

function RenderGallery($TemplateName=NULL) {
$renderdImages = $this->data()->Images . renderWith;
return $renderdImages;
}

}

Avatar
Hattori

2 August 2012 at 5:53am Community Member, 20 Posts

Replace

return $Image->CMSThumbnail();

By:

return $Image->setWidth(100); //100 or the value of the thumbnail width you want to set

Avatar
DesignerX.com.au

5 August 2012 at 8:29pm Community Member, 107 Posts

There is something wrong & when I try to show the thumbnail in the CMS , its escaping the html tags .
I found this in another gallery module ;)
This is for has_many : Gallery has_many Images so the thumbnails of the images will show in the Table .

$gridFieldConfig = GridFieldConfig_RelationEditor::create();
$gridField->getConfig()->getComponentByType('GridFieldDataColumns')->setFieldFormatting(array(
'Thumbnail' => function($val, $obj) {
if ($obj instanceof SGalleryImage) {
return $obj->getThumbnail();
} else {
return $obj;
// return var_dump($obj);
}
},
));

Avatar
jak

6 August 2012 at 1:29am (Last edited: 6 August 2012 1:32am), Community Member, 46 Posts

If you are running 3.0.1, the setFieldFormatting workaround that you use should no longer be necessary. Try to add or set summary_fields in SGalleryImage:

public static $summary_fields = array(
   'Image.CMSThumbnail' => 'Image',
   // and all other columns, like:
   // 'Caption' => 'Caption',
);


If you want a small thumbnail, you can also use StripThumbnail instead of CMSThumbnail.

BTW: If you have content that you don't want to have escaped, you need to add a cast to HTMLText. You can do this via the static variable $casting

static $casting = array(
      'SomeField' => 'HTMLText',
   );


or by using setFieldCasting() on a GridFieldDataColumns instance.

Avatar
DesignerX.com.au

6 August 2012 at 1:52am (Last edited: 6 August 2012 1:57am), Community Member, 107 Posts

Hi:
Just to confirm, this is using 3.0.1 :
Edited : I tried below, it works
public static $summary_fields = array(
'Image.CMSThumbnail' => 'Image', // here it work. I can also use CroppedImage or any other re-size method .
// and all other columns, like:
// 'Caption' => 'Caption',
);

It can also be done here, this will override settings from public static $summary_fields
$gridField->getConfig()->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'SortID' => 'SortID',
'Image.CMSThumbnail' => 'Image', // here it work. I can also use CroppedImage or any other re-size method .
'Title' => 'Title',
'ID' => 'ID'
));

Also, Nice tips about $casting;
)