Вывод количества документов
        Василий, приветствую.
Хочу вывести количество товара в каждой категории. Для этого использую такой сниппет:
Все отлично работает, но в 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            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.