Вывод количества документов
Василий, приветствую.
Хочу вывести количество товара в каждой категории. Для этого использую такой сниппет:
Все отлично работает, но в MS2 есть возможность добавлять один товар в несколько категорий, а этот сниппет считает только те товары, которые «физически» присутствуют в категории.
Подскажи, пожалуйста, как вывести количество всех товаров? Может есть какое готовое решение?
Спасибо.
Хочу вывести количество товара в каждой категории. Для этого использую такой сниппет:
$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);
Придумал не я))Все отлично работает, но в MS2 есть возможность добавлять один товар в несколько категорий, а этот сниппет считает только те товары, которые «физически» присутствуют в категории.
Подскажи, пожалуйста, как вывести количество всех товаров? Может есть какое готовое решение?
Спасибо.
Комментарии: 5
if (empty($parent)) {$parent = $modx->resource->id;}
$pids = array_merge(array($parent), $modx->getChildIds($parent));
$ids = array();
$q = $modx->newQuery('msProduct');
$q->where(array('class_key' => 'msProduct','parent:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
$q = $modx->newQuery('msProduct');
$q->leftJoin('msCategoryMember', 'msCategoryMember', '`msCategoryMember`.`product_id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','msCategoryMember.category_id:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
$ids2 = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($ids2)) {
$ids = array_unique(array_merge($ids, $ids2));
}
}
return count($ids);
Спасибо огромное.
Очень быстро. А как его выводить? А то сейчас у всех категорий значение = активной категории.
Очень быстро. А как его выводить? А то сейчас у всех категорий значение = активной категории.
Укажи параметр &parent=`id категории`.
Еще раз большое спасибо. Буду разбираться. Есть кое какие косяки, но это уже моя головная боль.
Всегда выводит 1
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.