pdoResources и сквозная нумерация страниц

Здравствуйте! Столкнулся с задачей сделать сквозную нумерацию страниц и сортировку по ней.
На пример есть такая структура каталога:

1. Каталог первого уровня_1 (1)
1.1 Каталог второго уровня_1 (2)
1.1.1 Каталог третьего уровня_1 (3)
— список товаров
1.1.2 Каталог третьего уровня уровня_2 (4)
— список товаров
1.2 Каталог второго уровня_2 (5)
— список товаров
2. Каталог первого уровня_2 (6)
2.1 Каталог второго уровня_1 (7)


Когда мы находимся например в «Каталог первого уровня_1», то нужно показывать список товаров по порядку каталогов в меню, т.е. в начале мы должны отображать товары из «Каталог третьего уровня_1», далее «Каталог третьего уровня уровня_2», а в конце из «Каталог второго уровня_2»

я сделал условия для pdoResources которое позволяет отсортировать товары по menuindex родителя, но он не учитывает уровень вложенности.

[[!getPage?
                 &elementClass=`modSnippet` &element=`pdoResources`
                   &limit=`15`
                   &leftJoin=`{
                        "parentResource": {
                           "class" : "modResource"
                           , "alias" : "parentResource"
                           , "on" : "parentResource.id = modResource.parent"
                       }
                   }`
                   &select=`{
                         "modResource": "*",
                         "parentResource": "parentResource.menuindex as parentindex"
                   }`
                   &where=`{"template:=":4}`
                   &sortby=`{"parentindex":"asc"}`
                   &tpl=`catalogItems`
]]
Помогите решить данную проблему.
Владимир Flame
19 мая 2014, 10:33
modx.pro
2 074
0

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

Владимир Flame
05 июня 2014, 17:14
0
Если кому понадобится, вот решение:
сниппет 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`
                ]]
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1