Общая сумма всех товаров

Доброго времени, нашел такой код который считает количество товаров
<?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);
помогите допилить его чтобы он еще считал и сумму этих товаров
eflit
01 ноября 2017, 07:14
modx.pro
2
883
+1
Поблагодарить автора Отправить деньги

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

Hetzerok
01 ноября 2017, 12:41
+1
К обоим запросам необходимо приджойнить таблицу с данными товара
$q->innerJoin('msProductData', 'Data', '`Data`.`id` = `msProduct`.`id`');
также нужно добавить селект цены (или любых интересующих вас параметров
$q->select('`Data`.`price`');
. Соответственно нужно также немного изменить метод подсчета.
В итоге должно получиться что-то такое
<?php
$parent = 12;
if (empty($parent)) {$parent = $modx->resource->id;}
$pids = array_merge(array($parent), $modx->getChildIds($parent));
$ids = array();
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'Data', '`Data`.`id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','parent:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
$q->select('`Data`.`price`');
if ($q->prepare() && $q->stmt->execute()) {
    while($data = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        $ids[$data['id']] = $data['price'];
    }
}
$q = $modx->newQuery('msProduct');
$q->leftJoin('msCategoryMember', 'Member', '`Member`.`product_id` = `msProduct`.`id`');
$q->innerJoin('msProductData', 'Data', '`Data`.`id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','Member.category_id:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
$q->select('`Data`.`price`');
if ($q->prepare() && $q->stmt->execute()) {
    while($data = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        if(!array_key_exists($data['id'], $ids)) {
            $ids[$data['id']] = $data['price'];
        }
    }
}
$count = count($ids);
$summ = 0;
foreach($ids as $v) {
    $summ += $v;
}

// Возвращаешь естественно что нужно
return $summ;
    eflit
    01 ноября 2017, 13:04
    0
    Спасибо
    Сергей Кепкин
    01 ноября 2017, 21:30
    0
    А тот код, который в вопросе — что именно считает, кол-во товаров в категории? А в списке подкатегорий будет работать? т.е. ссылки на подкатегории и рядом с каждой кол-во товаров в ней?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3