Joomla 1.5.22 + VM 1.1.8
Задача: вывести в закладке "Статистика" следующие данные:
- Дочерних товаров на складе: XXX
- Дочерних товаров на складе на сумму:XXX
В файле administrator/components/com_virtuemart/html/store.index.php
в 25-28 строках есть код вывода кол-ва Активных товаров, т.е которые Опубликованы:
// Number of active products
$db->query('SELECT count(*) as num_rows FROM #__{vm}_product WHERE vendor_id='.$ps_vendor_id.' AND product_publish="Y"');
$db->next_record();
$active_products = $db->f('num_rows')? $db->f('num_rows') : 0;
Берем его за основу и следом размещаем следующее(
исправлено!):
// Дочерних товаров на скдаде:
$db->query('SELECT sum(#__{vm}_product.product_in_stock) as summa FROM #__{vm}_product
WHERE vendor_id='.$ps_vendor_id.' AND product_parent_id!="0"');
$db->next_record();
$allprice3_products = $db->f('summa');
Идет запрос кол-ва товара у которого наличие не равно 0. Результат запроса кладется в $allprice_products
Отлично, запрос в БД есть, теперь нада это вывести.
Ищем в этом же файле ~150 строки код, выводящий кол-во активных товаров:
<tr>
<td width="50%"><?php
echo "<a href=\"".$_SERVER['PHP_SELF']."?option=com_virtuemart&page=product.product_list\">"
. $VM_LANG->_('PHPSHOP_STATISTIC_ACTIVE_PRODUCTS')?></a>:</td>
<td width="50%"> <?php echo $active_products ?> </td>
</tr>
Копируем его следом, правим и получаем:
<tr>
<td width="50%">
Всего товаров на складе:</td>
<td width="50%"> <?php echo $allprice_products ?> </td>
</tr>
Все, общее кол-во товара на складе выводится в главной странице магазина(в админке) в закладке Статистика.
Далее необходимо вывести
Товаров на складе на сумму: Спасибо за решение
beagler :
Решение суммирует все цены которые в наличие(без учета кол-ва наличия) (родительский + дочерний):
$db->query('SELECT sum(#__{vm}_product_price.product_price) as summa FROM #__{vm}_product
LEFT JOIN #__{vm}_product_price ON #__{vm}_product.product_id = #__{vm}_product_price.product_id
WHERE vendor_id='.$ps_vendor_id.' AND product_in_stock!="0"');
$db->next_record();
$allprice2_products = $db->f('summa');
Забыл указать еще ТРИ загвоздки:
1. (если вы используете дочерние товары): VM позволяет не указывать цену для дочерних товаров, тогда она будет браться из родительского товара. Соответственно в таблице __{vm}_product_price записей цен будет меньше чем товара в наличии, сумма будет не полной.
2. Дочерний товар может быть на складе 1, 2 или 5, нужно еще умножать цены на product_in_stock.
3. Еще при использовании дочерних товаров и при включенной настройке VM "непоказывать товары которых нет на складе", необходимо указывать наличие на складе "1" для родительского товара, чтобы товар показывался в каталоге. Соответственно будет считаться лишний родительский товар. Это легко решается добавлением в WHERE
AND product_parent_id!="0";
т.е :
WHERE vendor_id='.$ps_vendor_id.' AND product_in_stock!="0" AND product_parent_id!="0"');
Пункт 1 решается так:
LEFT JOIN #__{vm}_product_price ON #__{vm}_product.product_[b]PARENT[/b]_id = #__{vm}_product_price.product_id
Пункт 2 решается так:
$db->query('select Sum(C.product_price*P.product_in_stock) as summa from jos_vm_product P, jos_vm_product_price C
where P.product_parent_id=C.product_id AND product_in_stock!="0" AND product_parent_id!="0"');