Николай Ланец
10 нояб. 2014 г., 12:12

Процессор для работы с Gallery

Еще в прошлом году я писал про работу с Gallery средствами xPDO. Считаю такой метод более гибким и прозрачным, так как вызывать сразу два сниппета, для которых править несколько чанков, чтобы получить какую-то галерею, по мне - это все как-то сложно. Все должно быть проще - сделал выборку картинок, набил их в конечный HTML как захотелось и все. В прошлом топике вероятно было все слишком сложно (зато все подробно изучено :)), а вот здесь я хочу просто выложить небольшое готовое решение - процессор на выборку картинок из галереи. Он не большой, расширяет getlist-процессор из компонента modxSite, легко вызывается в Smarty, где уже вы можете оформлять вывод как угодно.
Итак, сам процессор:
<php require_once dirname(dirname(dirname(dirname(__FILE__)))). '/site/web/getlist.class.php'; class modWebGalleryItemsGetlistProcessor extends modSiteWebGetlistProcessor{ public $classKey = 'galItem'; public function prepareQueryBeforeCount(xPDOQuery $c){ $c = parent::prepareQueryBeforeCount($c); $where = array(); $c->innerJoin('galAlbumItem', "AlbumItems"); $c->innerJoin('galAlbum', "Album", "AlbumItems.album = Album.id"); if($album_id = (int)$this->getProperty('album_id')){ $where['Album.id'] = $album_id; } if($where){ $c->where($where); } return $c; } public function prepareRow(xPDOObject $object) { $object->set('relativeImage', $object->get('relativeImage')); return parent::prepareRow($object); } } return 'modWebGalleryItemsGetlistProcessor';
У меня расположение файла процессора - core/components/modxsite/processors/web/gallery/items/getlist.class.php, отсюда и пляшем с именем класса и путями.
Пример вызова в Smarty-шаблоне:
{$params = [ "album_id" => 1, "limit" => 36 ]} {processor action="web/gallery/items/getlist" ns="modxsite" params=$params assign=result} <ul class="thumbnails"> {foreach $result.object as $object} {$image = $object.relativeImage} {$thumb = $modx->runSnippet('phpthumbof', [ "input" => $image, "options" => "w=100&h=100&zc=1" ])} <li > <a class="thumbnail" href="{$image}" rel="prettyPhoto[_{$object.id}_]"> <img alt="{$image.name}" src="{$thumb}"> </a> </li> {/foreach} </ul>
Возвращаемый результат из процессора (естественно количество элементов в object будет зависеть от количества полученных картинок):
Array ( [success] => 1 [message] => [count] => 2 [total] => 147 [object] => Array ( [0] => Array ( [id] => 238 [name] => DSC_0450.JPG [filename] => 64/238.JPG [description] => [mediatype] => image [url] => [createdon] => 2013-11-20 19:46:03 [createdby] => 1 [active] => 1 [duration] => [streamer] => [watermark_pos] => tl [object_id] => 238 [relativeImage] => assets/components/gallery/files/64/238.JPG ) [1] => Array ( [id] => 239 [name] => DSC_0439.JPG [filename] => 64/239.JPG [description] => [mediatype] => image [url] => [createdon] => 2013-11-20 19:46:04 [createdby] => 1 [active] => 1 [duration] => [streamer] => [watermark_pos] => tl [object_id] => 239 [relativeImage] => assets/components/gallery/files/64/239.JPG ) ) )
Вот и все, оформляем галерею как хотим. Так же очень удобно результат процессор отлаживать в модуле Console. Напомню скрипт для вызова процессоров с отладкой: https://gist.github.com/Fi1osof/328469331b5258ff009a.

Добавить комментарий