Вывод количества документов

Василий, приветствую.

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

Подскажи, пожалуйста, как вывести количество всех товаров? Может есть какое готовое решение?
Спасибо.
Evgeny Epifanov
13 июля 2013, 13:28
modx.pro
3 408
0

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

Василий Наумкин
13 июля 2013, 18:02
2
0
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);
    Evgeny Epifanov
    13 июля 2013, 18:09
    0
    Спасибо огромное.
    Очень быстро. А как его выводить? А то сейчас у всех категорий значение = активной категории.
      Василий Наумкин
      13 июля 2013, 18:24
      0
      Укажи параметр &parent=`id категории`.
        Evgeny Epifanov
        13 июля 2013, 18:27
        0
        Еще раз большое спасибо. Буду разбираться. Есть кое какие косяки, но это уже моя головная боль.
    Андрей
    04 апреля 2015, 23:25
    0
    Всегда выводит 1
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5