Процессор для работы с 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.