Как снизить нагрузку при подсчете кол-во в pdoMenu дочерних ресурсов?
Всем известно, что есть
Вывожу в чанк родителя:
сниппет countChildren, который вызывает нагрузку
[[+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;
Есть ли менее нагружаемый скрипт, который делает всё тоже самое, кроме нагружаемости?
Поблагодарить автора
Отправить деньги
Комментарии: 3
Если задача состоит в подсчете, то лучше уж использовать метод getCount
Это конечно здорово, но как getCount реализовать в сниппете countChildren?
Возможен ещё и такой вариант:
Запустить плагин, который будет на сохранение ресурса подсчитывать количество дочерних и записывать число в ТВ. А затем вытягивать уже готовую цифру в меню
Запустить плагин, который будет на сохранение ресурса подсчитывать количество дочерних и записывать число в ТВ. А затем вытягивать уже готовую цифру в меню
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.