Я задавал глубину прохода 1 для $results = $modx->getChildIds (’1’);
Потом использовал $modx->getActiveChildren();
При использовании такого подхода получается очень много запросов к базе данных – лично я сделал бы все с помощью прямых запросов к базе данных (а не через getDocument), в этом случае можно обойтись одним запросом, если предварительно с помощью getChildIds построить список. А для того, чтобы отсортировать в нужном порядке, надо немного логику доработать.
У меня просто дерево документов ограничено 2 вложениями и больше не предусмотрено.
Если много документов то действительно будет много запросов к базе данных.
У документа есть параметр [*parent*] - номер (ID) родительского документа, может он тебе поможет
Quote from: Goodeeny at Dec 28, 2010, 03:56 PM
Вот, вот... как???
Например, как предлагалось, вызвать getChildIds с глубиной 1, то есть getChildIDs(1, 1) и сохранить в массиве. Потом сделать цикл по массиву и в цикле снова вызвать getChildIds и поместить результаты во вложенные массивы. Так делать, пока дочерних документов не будет найдено. В итоге получится массив с иерархией документов, который можно использовать при выводе. Параллельно с добавлением элементов в этот массив надо формировать строку ID, чтобы одним запросом к базе получить все нужные документы. После этого можно все выводить.
Quote from: Redduck at Dec 29, 2010, 02:46 PM
Наверно в цикле лучше вызвать $modx->getActiveChildren();
Не слишком удачная идея – так в цикле каждый раз будут обращения к базе данных, лучше сначала без обращения к базе определить все необходимые ID, а потом одним запросом получить все остальные данные.