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

Уважаемые мастера MODXRevo! Cтолкнулся с проблемой вывода количества товаров в minishop2.

Вывод сделал через сниппет getChildCount

<?php
$count = 0;
$parent = $modx->getOption('parent', $scriptProperties, 0);
$query = $modx->newQuery('modResource', array('parent' => $parent, 'deleted' => 0, 'published' => 1));
$query->select(array('count'=>'count(id)'));
if ($query->prepare() && $query->stmt->execute()) {
    $res = $query->stmt->fetch(PDO::FETCH_ASSOC);
    $count = $res['count'];
}
return $count;

На сайте разместил

Всего [[!getChildCount? &parent=`[[*id]]`]] товаров в категории
Все отображается правильно, но если товару задать несколько категорий, то для привязанных категорий счетчик не работает, так как по факту дочерних ресурсов в них нет. Подскажите в каком направлении действовать?
rkt777
21 июля 2017, 19:36
modx.pro
2
3 992
0

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

Роман
17 июля 2018, 09:19
3
0
Решили вопрос?

<?php
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', '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));
  }
}
return count($ids);
    Denis
    01 апреля 2020, 20:33
    1
    0
    Можно куда проще сделать.
    $count = $modx->runSnippet('msProducts', [
        'parents' => $id,
        'returnIds' => true,
        'limit' => 0,
    ]);
    
    $count = empty($count) ? 0 : count(explode(',', $count));
    Или на феноме
    {set $count = 'msProducts' | snippet : [
        'parents' => $id,
        'returnIds' => true,
        'limit' => 0,
    ]}
    
    {set $count = !$count ? 0 : $count | split | length}
      Denis
      06 мая 2020, 11:17
      0
      Забавно, да? Я пишу ответ на твой комментарий. А потом мы пересекаемся через месяц на буяне) Земля круглая.
        Роман
        06 мая 2020, 11:20
        0
        Ну, я всегда это знал )))
      Алекс
      01 июня 2020, 13:37
      0
      Та же проблема… Перепробовал разные варианты – ничего не считает, если категория не родительская. Хотя по ссылке открывается нужный раздел, и в нем есть нужный товар.
      Кому-то удалось решить?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5