*решение дано в ознакомительных целях для задания направления мышлению. Навешивание рюшечек и оптимизацию делайте сами своими умами 
[spoiler title=Часть IIб "Отображение товаров из подкатегорий произвольной вложенности (для ветки VM1.1.x)"]
В файле /administrator/components/com_VirtueMart/html/shop.browse.php ищем строку $dbp = new ps_DB;
Под ней добавляем:
function getCatergoryChildsList( $clist, $catid ){
$res_list = array( $catid );
$search_childs = true;
while( $search_childs ){
$search_childs = false;
foreach( $clist as $c_catid => $val ){
if( in_array( $val['category_parent_id'], $res_list ) ){
$res_list[] = $c_catid;
unset( $clist[ $c_catid ] );
$search_childs = true;
}
}
}
return $res_list;
}
$category_childs = '';
if ( $category_id && $ps_product_category->has_childs($category_id) ){
$category_childs = getCatergoryChildsList( $ps_product_category->getCategoryTreeArray(), $category_id );
}
Далее открываем /administrator/components/com_VirtueMart/html/shop_browse_queries.php, находим код:
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
меняем на немного подправленный нами:
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
if(!empty( $category_childs ))
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id` IN (".$category_id.",".implode(',',$category_childs).")";
else
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
}
Сохраняем, проверяем...
[/spoiler]
Всем удачи!
Воспользовался этим, спс все робит

, но неудобство мне кажется в том, что когда заходишь в подкатегорию, сверху все подкатегории пропадают, остается лишь список товара и переходить в другую подкатегорию не оч удобно
Возможно ли сделать так.. Допустим у меня категория с подкатегориями
Категория "Оборудование"
Подкатегории "Барное", "Тепловое", "Эл.Механическое" и т.д.
При заходе в подкатегорию "Барное" чтоб эти подкатегории отображались и в самой подкатегории?