Как снизить нагрузку при подсчете кол-во в pdoMenu дочерних ресурсов?

Всем известно, что есть
[[+children]]
при включенной настройке
&countChildren=`1`
Но
[[+children]]
не даёт, тот результат, так как меню двух уровневое и подсчет кол-ва вывожу в
&tplParentRow=`tpl.ParentRow`
Следовательно исходя из примеров
Вывожу в чанк родителя:
([[countChildren? &parent=`[[+id]]`]])
но, в pdoMenu количество вложенных ресурсов сильно нагружает сервер

сниппет countChildren, который вызывает нагрузку
<?php
$count = 0;
$parent = isset($parent) ? (integer) $parent : 0;

// Define Parents
$q = $modx->newQuery('modResource');
$q->select(array(
    'id',
    'parent'
));
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);

$parent_ids = array($parent);
foreach ($res as $v) {
    if (in_array($v['parent'], $parent_ids) AND !in_array($v['id'], $parent_ids)) {
        $parent_ids[] = $v['id'];
    }
}

$q = $modx->newQuery('modResource');
$q->where(array(
    'parent:IN' => $parent_ids,
    'isfolder' => false,
    'published' => true
));
$q->select(array(
    'id'
));
$q->prepare();
$q->stmt->execute();
$count = count($q->stmt->fetchAll(PDO::FETCH_ASSOC));
$output = $count;
$modx->cacheManager->set($count, $output);

return (string) $output;
Есть ли менее нагружаемый скрипт, который делает всё тоже самое, кроме нагружаемости?
R2m0x94 (Vasily)
14 мая 2020, 12:45
modx.pro
492
+1
Поблагодарить автора Отправить деньги

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

Баха Волков
14 мая 2020, 13:32
+1
Если задача состоит в подсчете, то лучше уж использовать метод getCount
    R2m0x94 (Vasily)
    14 мая 2020, 13:50
    0
    Это конечно здорово, но как getCount реализовать в сниппете countChildren?
    Юрий
    15 мая 2020, 11:26
    0
    Возможен ещё и такой вариант:
    Запустить плагин, который будет на сохранение ресурса подсчитывать количество дочерних и записывать число в ТВ. А затем вытягивать уже готовую цифру в меню
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3