ModX Revolution: сортировка папок menuindex, затем элемент menuindex
Я новичок в ModX. У меня есть ресурсы, вложенные друг в друга, как это:
resource1
- resource1-child1
- resource1-child2
resource2
- resource2-child1
- resource2-child2
и этот код:
[[!getResources?
&includeContent=`1`
&parents=`[[pdoField?
&id=`[[*id]]`
&field=`id`
&topLevel=`4`]]`
&resources=`-[[*id]]`
&includeTVs=`1`
&processTVs=`1`
&sortby=`menuindex`
&sortdir=`asc`
&depth=`10`
&limit=`100`
&tpl=`allDoctors`
&where=`{"template:=":104}`]]
Но почему-то не сортирует элементы по индексу меню. Похоже, что он ничего не сортирует, если я не извлекаю детей из родительских ресурсов. Как сделать так, чтобы все сортировалось по индексу меню папок, а затем по индексу меню детей? заранее спасибо
1 ответ
Сам нашел решение здесь, создав фрагмент с именем getResourcesTree
<?php
if (!function_exists('multiarray_keys')) {
function multiarray_keys($ar) {
foreach ($ar as $k => $v) {
$keys[] = $k;
if (is_array($ar[$k]))
$keys = array_merge($keys, multiarray_keys($ar[$k]));
}
return $keys;
}
}
$parents = (!empty($parents) || $parents === '0') ? explode(',', $parents) : array($modx->resource->get('id'));
$depth = isset($depth) ? (integer) $depth : 10;
$tree = $modx->getTree($parents, $depth);
$tree = multiarray_keys($tree);
$tree = implode(',', $tree);
$tree = 'FIELD(modResource.id, ' . $tree . ')';
return $tree;
и разобрался так:
[[!getResources?
&includeContent=`1`
&parents=`[[pdoField?
&id=`[[*id]]`
&field=`id`
&topLevel=`4`]]`
&resources=`-[[*id]]`
&includeTVs=`1`
&processTVs=`1`
&sortby=`[[!getResourcesTree?
&parents=`[[pdoField?
&id=`[[*id]]`
&field=`id`
&topLevel=`4`]]`
&depth=`100`]]`
&sortdir=`asc`
&depth=`10`
&limit=`100`
&tpl=`allDoctors`
&where=`{"template:=":104}`]]