Вывод MIGX галерей из разных ресурсов с пагинацией

Всем привет.
Имеется структура ресурсов:
-Раздел
--Категория 1
--Категория 2
--Категория 3

В Категориях фото загружены через MIGX и выводится сниппетом pdoPage:
{'!pdoPage' | snippet : [
    'element' => 'getImageList',
    'limit' => '11',
    'tvname' => 'gallery',
    'tvPrefix' => '',
    'tpl' => 'tpl-gallery',
    'includeTVs' => 'gallery',
    'processTVs' => 'gallery',
    'prepareTVs' => 'gallery',
    'includeContent' =>'1', 
    'toPlaceholder' => 'result',
    'sort'=> '[{"sortby":"MIGX_id","sortdir":"DESC"}]'
]}
Вопрос, есть ли возможность вывести общую галерею в Разделе, используя Migx галереи из категорий 1,2,3 с пагинацией?
Параметр parents игнорируется, и поле gallery тянется только из текущего ресурса.
Параметр docid — принимает только один параметр и тоже не подходит

Пробовал корректировать по этому методу: webstool.ru/pdopage-i-getimagelist-postranichnaya-navigacziya-migx.html
Но в итоге сниппет дублирует элементы, по 2 раза выводит
Сергей Карпович
26 мая 2023, 12:11
modx.pro
2
257
0

Комментарии: 6

Павел Романов
26 мая 2023, 14:19
+2
Попробуйте сделать такой сниппет:
<?php
$totalVar = $modx->getOption('totalVar', $scriptProperties, 'total');
$limit = $modx->getOption('limit', $scriptProperties, 10);
$offset = $modx->getOption('offset', $scriptProperties, 0);
$sortby = $modx->getOption('sortby', $scriptProperties, 'MIGX_id');
$sortdir = $modx->getOption('sortdir', $scriptProperties, 'DESC');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$docid = str_replace(' ', '', $docid);

$table = $modx->getOption('table_prefix').'site_tmplvar_contentvalues';
$sql = "SELECT * FROM {$table} WHERE `contentid` IN ({$docid}) AND `tmplvarid` = '{$tvId}'";
$q = $modx->prepare($sql);
$q->execute();
$tvs = $q->fetchAll(PDO::FETCH_ASSOC);

$array = array();
foreach($tvs as $tv){
   	$a = json_decode($tv['value'], 1);
   	foreach($a as $i){
   	    $array[] = $i;
   	}
}
$modx->setPlaceholder($totalVar, count($array));
function sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}
usort($array, sorter($sortby));
$sortdir == 'DESC' ? krsort($array) : ksort($array);
$array = array_slice($array, $offset, $limit);
foreach($array as $item){
    $out .= $modx->getChunk($tpl, $item);
}
return $out;

И используйте его в pdoPage:
[[!pdoPage?
    &element=`SnippetName`
    &tvId=`43` // ID TV "gallery"
    &docid=`18,38,59,46` // ID ресурсов
    &limit=`12`
    &tpl=`tpl-gallery`
]]
[[!+page.nav]]
    Сергей Карпович
    26 мая 2023, 14:36
    0
    Спасибо, вроде бы то что нужно.
    Подскажите, как передать в чанк ID ресурса с которого отображется фото, что бы путь корректно прописать, а то в [[+image]] приходит не полный путь а только название файла
      Павел Романов
      26 мая 2023, 14:46
      0
      Добавьте на 20 строке:
      <?php
      //.......
      foreach($tvs as $tv){
         	$a = json_decode($tv['value'], 1);
         	foreach($a as $i){
                  $i['resource_id'] = $tv['contentid']; // вот это
         	    $array[] = $i;
         	}
      }
      //.......
      В чанке используйте [[+resource_id]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
6