Подсчёт количества документов в контейнерах
Используется сниппет CountChilds
Сниппет подсчитывает количество документов и выводит его в пункты меню через шаблон строки пункта.
Вариант сниппета, если нужно подсчитать только документы, игнорируя контейнеры.
Например:
Контейнер-1 (4)
— Документ
— Документ
— Контейнер-2 (2)
— — Документ
— — Документ
Код сниппета:
<?php
/**
* Вызов сниппета из шаблона Wayfinder: <span>[[!CountChilds? &id=`[[+id]]`]]</span>
*
*
http://community.modx-cms.ru/blog/questions/4612.html
*/
$id=$modx->getOption('id',$scriptProperties,0);
if ($id == 0) return 'Не задан id страницы';
$depth = 10; //глубина вложенности
$arr = $modx->getChildIds($id,$depth);//получили массив ids всех потомков(и контейнеров и документов)
if (count($arr) == 0) return '';
$c = $modx->newQuery('modResource');
$c->where(array(
'id:IN'=>$arr, //выбираем только детей
'isfolder'=>0 //отсекаем контейнеры
));
$c->limit = 0;
$docs=$modx->getCollection('modResource',$c);//получили коллекцию детей-документов
return count($docs);
Вариант сниппета, если нужно подсчитать все ресурсы, включая контейнеры и документы.
Например:
Контейнер-1 (5)
— Документ
— Документ
— Контейнер-2 (2)
— — Документ
— — Документ
Код сниппета:
<?php
/**
* Вызов сниппета из шаблона Wayfinder: <span>[[!CountChilds? &id=`[[+id]]`]]</span>
*
* Источник:
http://community.modx-cms.ru/blog/questions/4612.html
*/
$id=$modx->getOption('id',$scriptProperties,0);
if ($id == 0) return 'Не задан id страницы';
$depth=10; //глубина вложенности
$criteria=array(
'isfolder'=>0 //отсекаем контейнеры
);
$count = count($modx->getChildIds($id,$depth,$criteria));
if ($count != 0) {
return $count; //Если что-то найдено, то выводим количество
} else {
return 'Тут написать что-то, чтобы не красовался абсурдный ноль';
}
Источник: community.modx-cms.ru/blog/questions/4612.html