Владимир Flame

Владимир Flame

Был в сети 13 ноября 2019, 21:57
Заказы не принимаю
Если кому понадобится, вот решение:
сниппет getCatalogIDs
$id = $modx->getOption('id',$scriptProperties,$modx->resource->get('id'));
//убираем вложенность массива, при этом сохраняя порядок.
if (!function_exists('array_keys_flatten')){
    function array_keys_flatten($array){
        if (!is_array($array))
            return false;
        $result = array();
        foreach($array as $key=>$value){
            //только для элементов содержащих вложенные документы. если не нужно это условие, перенести $result[] = $key; до проверки 
            if (is_array($value)){

                $result[] = $key;
                $result = array_merge($result,array_keys_flatten($value));
            }
        }
        return $result;
    }
}

$tree = $modx->getTree($id);
//отсортированный по menuindex массив документов.
$catalogTree = array_keys_flatten($tree);

return implode(',',$catalogTree);
вызов сниппета на странице
[[!getPage?
                   &elementClass=`modSnippet` &element=`pdoResources`
                   &parents=`[[*id]]`
                   &limit=`15`
                   &showHidden=`1`
                   &sortby=`FIELD(modResource.parent, [[getCatalogIDs? &id=`[[*id]]`]] )`
                   &sortdir=`ASC`
                   &tpl=`items.tpl`
                ]]