Very good job
but it is possible to have ratio aspect keep on thumbnail without generating extra picture ?
i found this how seems very good :
http://snipplr.com/view/753/create-a-thumbnail-maintaining-aspect-ratio-using-gd/
because i have picture with different ratio and actually Gallery generate extra pixel white which is not pretty if background is not white
[Edit]
As i needed real url of gallery image and not version of thumbnails, i made a little fork of snippet GalleryItem in adding these lines :
/* setup placeholders */
$itemArray = $item->toArray();
$itemArray['filename'] = basename($item->get('filename'));
$itemArray['filesize'] = $item->get('filesize');
$itemArray['image_path'] = $item->get('image_path'); //adding
$itemArray['absoluteImage'] = $item->get('absoluteImage'); //adding
$itemArray['relativeImage'] = $item->get('relativeImage'); //adding ... in reality this is one i needed
and now can use these new placeholders :
[[!MyGalleryItem? &id=`4` ]]
[[!+galitem.filename:notempty=`
<img class="[[+galitem.imgCls]]" src="[[+galitem.relativeImage]]" alt="[[+galitem.description]]" />
`]]
in fact i had created also an another snippet which give me ID of Gallery item in giving his name, tag or album :
<?php
/**
* Addon Gallery
*
* @package gallery
*/
/**
* Get id a single Gallery Item
*
* @package gallery
*/
$gallery = $modx->getService('gallery','Gallery',$modx->getOption('gallery.core_path',null,$modx->getOption('core_path').'components/gallery/').'model/gallery/',$scriptProperties);
if (!($gallery instanceof Gallery)) return '';
/* get ID of item */
$name = $modx->getOption('name',$scriptProperties,'');
$album = $modx->getOption('album',$scriptProperties,false);
$tag = $modx->getOption('tag',$scriptProperties,'');
if (empty($name) && empty($album) && empty($tag)) return '';
/* setup default properties */
$c = $modx->newQuery('galItem');
$c->innerJoin('galAlbumItem','AlbumItems');
$c->innerJoin('galAlbum','Album',$modx->getSelectColumns('galAlbumItem','AlbumItems','',array('album')).' = '.$modx->getSelectColumns('galAlbum','Album','',array('id')));
/* pull by album */
if (!empty($album)) {
$albumField = is_numeric($album) ? 'id' : 'name';
$albumWhere = $albumField == 'name' ? array('name' => $album) : $album;
$album = $modx->getObject('galAlbum',$albumWhere);
if (empty($album)) return '';
$c->where(array(
'Album.'.$albumField => $album->get($albumField),
));
$galleryId = $album->get('id');
$galleryName = $album->get('name');
$galleryDescription = $album->get('description');
unset($albumWhere,$albumField);
}
if (!empty($tag)) { /* pull by tag */
$c->innerJoin('galTag','Tags');
$c->where(array(
'Tags.tag' => $tag,
));
if (empty($album)) {
$galleryId = 0;
$galleryName = $tag;
$galleryDescription = '';
}
}
if (!empty($name)) { /* pull by tag */
$c->innerJoin('galTag','Tags');
$c->where(array(
'galitem.name' => $name,
));
}
/* get item */
$c = $modx->newQuery('galItem');
$c->select($modx->getSelectColumns('galItem','galItem'));
$c->where(array(
'name' => $name,
));
$item = $modx->getObject('galItem',$c);
if (empty($item)) return '';
$id = $item->get('id');
return $id;
Hum maybe it is possible to optimize ... i have just make this today ... for my first snippet

i think it will be more easier to integrate in GalleryItem ?
So for my site i do this for example for my software template :
[[!MyGalleryItem? &id=`[[!MyGalleryGetIDItem? &name=`icone` &album=`[[*alias]]` ]]`]]
[[!+galitem.filename:notempty=`
<img class="[[+galitem.imgCls]]" src="[[+galitem.relativeImage]]" alt="[[+galitem.description]]" />
`]]
i make an album by software and give name to image for his role : ’icone’ for icon, ’accueil’ for main screen ....
So just need to upload bitmaps and naming for new software ...