So I'm still pretty new to silverstripe (about 3 or 4 days), so this may be covered elsewhere. If it is, oh well, I still learned a good bit about how the pages interact.
In my on going quest to find a gallery preview script, one that would display X number of images out of a gallery and link to it, I just opted to create my own.
On with the code!
In the GalleryPage.php insert
static $db
'PreviewLimit' => 'Int',
'PreviewWidth' => 'Int',
'PreviewHeight' => 'Int',
'PreviewCols' => 'Int'
static $defaults --- You can use what ever defaults fit your needs best.
'PreviewLimit' => 4,
'PreviewWidth' => 75,
'PreviewHeight' => 75,
'PreviewCols' => 4
RUN /db/build?flush=1
in function getCMSFields( $cms ) --- this will add a new tab on the gallery page to edit the preview settings.
$fields->addFieldsToTab( 'Root.Content.Gallery Preview', array(
new HeaderField( _t('GalleryPage.GALLERYPREVIEWLAYOUT','Child Gallery Preview Layout') ),
new NumericField( 'PreviewLimit', _t('GalleryPage.GALLERYPREVIEWLIMIT','Child Gallery Preview Limit') ),
new NumericField( 'PreviewWidth', _t('GalleryPage.GALLERYPREVIEWWIDTH','Child Gallery Preview Image Width') ),
new NumericField( 'PreviewHeight', _t('GalleryPage.GALLERYPREVIEWHEIGHT','Child GalleryPreview Image Height') ),
new NumericField( 'PreviewCols', _t('GalleryPage.GALLERYPREVIEWCOLS','Child Preview Images Per Row') )
));
INSERT THIS FUNCTION into the GalleryPage class
function GalleryPreview () {
$parent = $this->getParent(); // Get the data from the page you are on.
if ( $parent->class != "GalleryPage" ) // if for some reason the page you are on is not a gallery, use the child gallery info.
$parent = $this;
$items = $this->GalleryItems( $parent->PreviewLimit ); // get the gallery
$output = "<table class=\"gallery_preview\"><tr>";
$x = 0; // column counter
foreach ( $items AS $item )
{
// Taken for word for word from GalleryItems... saw no need to add code to GalleryItems if this would only be used in a preview
$ext = $item->getExtension();
if( ! is_bool( strpos( GalleryPage_Extension::$exts[ 'Images' ][ 'Extensions' ], $ext ) ) ) { // ...create/Get the formatted image...
$imgForThumbnail = $item->newClassInstance( "GalleryPage_Image" );
}
if( method_exists( $imgForThumbnail, "generate{$this->ThumbnailType}" ) )
$imgThumbnail = $imgForThumbnail->getFormattedImage( $this->ThumbnailType, $parent->PreviewWidth, $parent->PreviewHeight );
// Uses $this->ThumbnailType instead of $parent->ThumbnailType to get the same type of thumbnail that will be displayed in the gallery
else // Fall back to the de facto image resize method
$imgThumbnail = $imgForThumbnail->getFormattedImage( 'ResizedImage', $parent->PreviewWidth, $tparent->PreviewHeight );
// New row
if ( !($x % $parent->PreviewCols) )
$output .= "</tr><tr>";
$output .= "<td width=\"".round(100 / $parent->PreviewCols)."%\"><img src=\"".Director::baseURL().$imgThumbnail->Filename."\" /></td>";
$x++;
}
$output .= "</tr></table>";
return $output;
}
EXAMPLE USE
<% control Children %>
<div class="gallery_preview"><a href="$Link">$Title</a><br />
$GalleryPreview
</div>
<% end_control %>
Hope this helps some new or even experienced users out!