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've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Archive /

Our old forums are still available as a read-only archive.

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

My Gallery Module Preview Code


Go to End


3 Posts   2256 Views

Avatar
Yellow7 Jon

Community Member, 39 Posts

26 June 2008 at 4:32am

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!

Avatar
Willr

Forum Moderator, 5523 Posts

26 June 2008 at 2:08pm

Useful code snippets work well in the documentation! You might like to make a page like 'Gallery Modifications' or something and link to it from the modules:gallery

Avatar
Yellow7 Jon

Community Member, 39 Posts

28 June 2008 at 5:35am

i may just do that! thanks for the feed back