Вывод количества товаров в категории

Зачастую нам нужно вывести количество товаров в категории интернет-магазина. Такую задачу решает &prepareSnippet. В данном примере мы будем использовать его в связке в pdoMenu

Код сниппета, подсчитыващего количество товаров в категории

if (empty($parent)) {$parent = $row['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', 'Member', '`Member`.`product_id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','Member.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));
	}
}
$row['ids'] = count($ids);
return serialize($row);

Далее в нужном нам месте выводим сниппет pdoMenu. Обратите внимание на параметр &prepareSnippet, в который мы передаем навзание нашего сниппета, обеспечивающего подсчет количества товаров в категории. Данное количество он возвращает в плейсхолдер ids.

{'!pdoMenu' | snippet : [
	'startId' => $id,
	'level' => 1,
	'tpl' => 'tpl_row',
	'tplOuter' => 'tpl_outer',
	'where' => '{"class_key":"msCategory"}',
	'prepareSnippet' => 'count_product',
]}
Яндекс.Метрика Рейтинг@Mail.ru