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

Еще в прошлом году я писал про работу с Gallery средствами xPDO. Считаю такой метод более гибким и прозрачным, так как вызывать сразу два сниппета, для которых править несколько чанков, чтобы получить какую-то галерею, по мне - это все как-то сложно. Все должно быть проще - сделал выборку картинок, набил их в конечный HTML как захотелось и все. В прошлом топике вероятно было все слишком сложно (зато все подробно изучено :)), а вот здесь я хочу просто выложить небольшое готовое решение - процессор на выборку картинок из галереи. Он не большой, расширяет getlist-процессор из компонента modxSite, легко вызывается в Smarty, где уже вы можете оформлять вывод как угодно.

Итак, сам процессор:

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.