Fi1osof 10 ноября 2014 2 0
Еще в прошлом году я писал про работу с 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.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.