Вывод изображении из нескольких ресурсов Решено

Дополнение: ms2gallery,pdoTools

Добрый день, друзья.
Нужен совет, по выводу изображении из нескольких ресурсов + присоединения pagetitle ресурса
В данный момент все изображения выводятся из одного ресурса.
Попытался указать в
'where' => '{"parent":10,"active":1}',
Но это не срабатывает.
Вот сам код:
    {'!pdoPage' | snippet : [
        'loadModels'		=> 'ms2gallery',
        'class'   		=> 'msResourceFile',
        'where'   		=> '{"parent":0,"resource_id":'~ $_modx->resource.id ~',"active":1}',
        'limit'   		=> '12',
        'sortby'  		=> 'rank',
        'sortdir'		=> 'ASC',
        'leftJoin'  		=> '{
                        		"Resource": {
                           			"class": "modResource",
                           			"on": "msResourceFile.resource_id = Resource.id"
                          		},
                       			"770x640":{
                        			"class":"msResourceFile", 
                        			"alias":"770x640", 
                    				"on":"770x640.parent=msResourceFile.id AND 770x640.path LIKE \'%/770x640/\'"
                       			}
        }',
        'select'		=> '{
                       		"msResourceFile":"*",
                       		"Resource": "pagetitle",
                       		"770x640":"770x640.url as 770x640"
         }',
         'tpl'   		=> 'tpl.gallery',
         'showLog'      	=> 1,
    ]}

Лог
0.0000801: Loaded model "ms2gallery" from "/core/components/ms2gallery/model/"
0.0000930: pdoTools loaded
0.0000842: xPDO query object created
0.0003719: leftJoined modResource as Resource
0.0001781: leftJoined msResourceFile as 770x640
0.0001500: Added selection of msResourceFile: SQL_CALC_FOUND_ROWS `id`, `resource_id`, `source`, `parent`, `name`, `alt`, `description`, `add`, `path`, `file`, `type`, `createdon`, `createdby`, `rank`, `url`, `properties`, `hash`, `active`
0.0001829: Added selection of modResource: `pagetitle`
0.0000229: Added selection of msResourceFile: 770x640.url as 770x640
0.0002129: Added where condition: parent=0, resource_id=10, active=1
0.0000658: Sorted by msResourceFile.rank, ASC
0.0000100: Limited to 12, offset 0
0.0005019: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msResourceFile`.`id`, `msResourceFile`.`resource_id`, `msResourceFile`.`source`, `msResourceFile`.`parent`, `msResourceFile`.`name`, `msResourceFile`.`alt`, `msResourceFile`.`description`, `msResourceFile`.`add`, `msResourceFile`.`path`, `msResourceFile`.`file`, `msResourceFile`.`type`, `msResourceFile`.`createdon`, `msResourceFile`.`createdby`, `msResourceFile`.`rank`, `msResourceFile`.`url`, `msResourceFile`.`properties`, `msResourceFile`.`hash`, `msResourceFile`.`active`, `Resource`.`pagetitle`, 770x640.url as 770x640 FROM `modx_akzhaik_ms2_resource_files` AS `msResourceFile` LEFT JOIN `modx_akzhaik_site_content` `Resource` ON msResourceFile.resource_id = Resource.id LEFT JOIN `modx_akzhaik_ms2_resource_files` `770x640` ON 770x640.parent=msResourceFile.id AND 770x640.path LIKE '%/770x640/' WHERE  ( `msResourceFile`.`parent` = 0 AND `msResourceFile`.`resource_id` = 10 AND `msResourceFile`.`active` = 1 )  ORDER BY msResourceFile.rank ASC LIMIT 12 "
0.0035250: SQL executed
0.0001481: Total rows: 53
0.0000801: Rows fetched
0.0023580: Loaded "modChunk" with name "tpl.gallery"
0.0031340: Compiled Fenom chunk with name "modchunk/61"
0.0106010: Returning processed chunks
0.0170560: Total time
9 699 328: Memory usage
Чанк tpl.gallery
<li class="gallery-item mix mix_all gallery-grid firstItem" style="display: inline-block; opacity: 1;">
    <!-- Image  -->
    <figure class="item_img img-intro img-intro__none">
        <a class="fancybox-thumb zoom articleGalleryZoom" data-fancybox="fancybox" data-fancybox-group="portfolios" data-fancybox-type="image" class="zoom" href="[[+url]]">
            <img alt="" class="BWFilter BWfade" src="{$_pls["770x640"]}"
            style="top: 0px; left: 0px; position: absolute; transform: translate3d(0px, 0px, 0px); opacity: 0; filter: grayscale(100%);">
            <img alt="" src="{$_pls["770x640"]}">
        </a>
    </figure>
    <div class="item_header">
        <div class="item_title visible-first visible">
            <span class="item_title_part0 item_title_part_odd item_title_part_first_half item_title_part_first">{$pagetitle}</span> 
  	    </div>  			
    </div>
    <!-- info BOTTOM -->
    <div class="clearfix"></div>
</li>
02 ноября 2016, 14:14    Нурбол Бокен   
0    504 +1

Комментарии (4)

  1. Павел Гвоздь 03 ноября 2016, 23:01 # +2
    Они выводятся для одного ресурса, т.к. ты делаешь выборку для одного ресурса — для текущего:
    {"parent":0,"resource_id":'~ $_modx->resource.id ~',"active":1}

    Опиши подробнее, какова структура дерева ресурсов, там где хранятся изображения и, на примере описанной структуры, из каких ресурсов нужно вывести их?
    1. Нурбол Бокен 04 ноября 2016, 00:21 # 0

      В данный момент все изображения выводятся из 10 ресурса.
      Необходимо вывести изображения из дочерних ресурсов 34, 35, 36 и т.д.
      В одном ресурсе будет несколько изображении.
      Думал вывести так:
      "parent":10
      Но так не срабатывает…
      1. Павел Гвоздь 04 ноября 2016, 01:17 # +3
        И не сработает… Тут parent из объекта msResourceFile, а там он содержит в себе ID миниатюрок. Ты верно указал parent = 0 в where. Тебе надо с resource_id работать.

        Я вижу это так:

        1. Сначала получаем id дочерних ресурсов, из которых будем дёргать изображения. Можно сделать это с помощью pdoResources и параметра return = ids. Но я предлагаю пойти другим путём. В Fenom в объекте $_modx есть замечательный метод — getChildIds, который, к сожалению, в документации по Fenom в pdoTools не описан. Используя его, мы можем получить массив id дочерних ресурсов без лишних обращений к базе, т.к. данный метод работает с картой ресурсов. Это делается следующим образом:
          {var $childs = $_modx->getChildIds($_modx->resource.id, 1, ['context' => $_modx->context.key])}
          Вторым параметром в методе передаётся глубина поиска. Поэтому, если у тебя, помимо одного уровня вложенности, есть дочерние ресурсы, находящиеся глубже, то укажи не 1, а что-нибудь повыше.

        2. Передаём массив $childs в параметр where при вызове сниппета. Будет примерно так:
          {if $childs?}
              {'!pdoPage' | snippet : [
                  ...
                  'where' => [
                      'msResourceFile.parent' => 0,
                      'msResourceFile.resource_id:IN' => $childs,
                      'msResourceFile.active' => 1,
                  ]
                  ...
              ]}
          {/if}
          Я намеренно заменил JSON на массив, т.к. не люблю использовать JSON, когда можно сделать тоже самое массивом.
        1. Нурбол Бокен 04 ноября 2016, 07:57 # 0
          Благодарю за такой развернутый ответ, реально помог!
    Вы должны авторизоваться, чтобы оставлять комментарии.