Вырезка из стандартного модуля производителей виртуя:
файл mod_virtuemart_manufacturers.php
$query = "SELECT DISTINCT m.manufacturer_id, m.mf_name
FROM #__{vm}_manufacturer m
LEFT JOIN #__{vm}_product_mf_xref mx ON mx.manufacturer_id = m.manufacturer_id
LEFT JOIN #__{vm}_product p ON p.product_id = mx.product_id
LEFT JOIN #__{vm}_product_category_xref cx ON cx.product_id = p.product_id
WHERE cx.category_id =".(int)$category_id;
$query .= " ORDER BY m.mf_name ASC";
$query_all = "SELECT m.manufacturer_id,m.mf_name FROM #__{vm}_manufacturer m ";
$query_all .= "ORDER BY m.mf_name ASC";
меняем это на
$query = "SELECT DISTINCT m.manufacturer_id, m.mf_name
FROM #__{vm}_manufacturer m
LEFT JOIN #__{vm}_product_mf_xref mx ON mx.manufacturer_id = m.manufacturer_id
LEFT JOIN #__{vm}_product p ON p.product_id = mx.product_id
LEFT JOIN #__{vm}_product_category_xref cx ON cx.product_id = p.product_id
WHERE cx.category_id =".(int)$category_id;
if (!empty ($mf_category_id)) $query .= " AND m.mf_category_id = ".(int)$mf_category_id;
$query .= " ORDER BY m.mf_name ASC";
$query_all = "SELECT m.manufacturer_id,m.mf_name FROM #__{vm}_manufacturer m ";
if (!empty ($mf_category_id)) $query_all .= " WHERE m.mf_category_id = ".(int)$mf_category_id;
$query_all .= "ORDER BY m.mf_name ASC";
перед этим запросом после вывода параметров модуля выводим еще один параметр
$mf_category_id = $params->get( 'mf_category_id', '');
С этим файлом все.
Берем mod_virtuemart_manufacturers.xml, между двумя любыми параметрами вставляем дополнительный параметр:
<param name="mf_category_id" type="text" default=""
label="Категория производителя"
description="Введите здесь ИД категории производителя, если оставить пустым, то модуль будет выводить производителей из всех категорий." />
Все сохраняем, пользуемся. Работоспособность не проверял, все в теории, но работать должно.